支付宝手机支付接口
描述: 网站需要调用 支付宝支付功能------
这次介绍 手机网站支付
2017.3月支付宝手机网站支付升级2.0(认真看) 官方文档
升级后,可以直接在网站中调起 移动端APP支付,这才是为什么升级的主要原因-----必备!
最新SDK---AopSdk.dll 下载 后,在你需要的项目中引用dll,服务端写的很简单,
//调用Ali封装好的接口获取支付链接 IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", Config.partner2, Config.private_key2, "json", "1.0", "RSA2", "alipay_public_key", "utf-8", false); AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest(); request.SetNotifyUrl(notifyUrl); request.SetReturnUrl(showUrl); request.BizContent = "{" + " \'body\':\'"+ body +"\'," + " \'subject\':\'"+ subject +"\'," + " \'out_trade_no\':\'" + outTradeNo + "\'," + " \'timeout_express\':\'30m\'," + " \'total_amount\':" + totalFee + "," + " \'product_code\':\'QUICK_WAP_PAY\'" + " }"; AlipayTradeWapPayResponse response = client.pageExecute(request); string form = response.Body; Response.Write(form);
form就是你需要的内容。 这里强调一下:官方SDK运行的结果 form 是一个FORM 表单Response.Write(form);
,
如果你需要得到一个 链接地址的话,需要对SDK修改,如下打开sdk源代码找到这个方法。
#region IAopClient Members
public T pageExecute<T>(IAopRequest<T> request) where T : AopResponse
{
return pageExecute<T>(request, null, "POST"); ------改成 GET,获取的就是 支付url,重新编译引用。
}
#endregion
开发中需要注意的配置事项:
1、添加应用---签约手机网站支付
2、配置密钥(认真看)
步骤1:RSA公私钥生成(保存好,后期开发用到 这个“应用公钥”)
用工具生成 2048(选非java的) 上传到 【应用公钥】,对应的私钥 放到代码中【商户的私钥】,同时得到 【支付宝公钥】放到代码中
这个搞不对的话,那会一直报错 说什么 秘钥不正确
生成方式一(推荐):使用支付宝提供的一键生成工具(内附使用说明)
步骤2:上传公钥&获取支付宝公钥(重要)
3、快速接入
内含JAVA、PHP、CSHARP(C#)三种编程语言。 下载各自DOME里面有介绍怎么使用,基本上都可以运行成功。
代码中这些配置相当重要,配置不对就会导致 未将对象引用到实例这样的错误。
支付回调:
if (verifyResult)//验证成功 { bool isRefund = false; string batch_no = string.Empty; if(sPara.ContainsKey("out_biz_no")) { isRefund = true; batch_no = sPara["out_biz_no"]; } //商户订单号 string out_trade_no = Request.Form["out_trade_no"]; //支付宝交易号 string trade_no = Request.Form["trade_no"]; //交易状态 string trade_status = Request.Form["trade_status"]; string buyer_id = Request.Form["buyer_id"]; string buyer_emial = Request.Form["buyer_logon_id"]; if (string.IsNullOrEmpty(out_trade_no)) { throw new Exception("商户订单号不能为空"); } out_trade_no, trade_no, trade_status)); if (trade_status == "TRADE_FINISHED") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的 //如果有做过处理,不执行商户的业务程序 //处理业务逻辑 //注意: //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 } else if (trade_status == "TRADE_SUCCESS") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的 //如果有做过处理,不执行商户的业务程序 if (isRefund) { //处理退款业务---退款成功 } else { //处理订单业务---付款成功 } //注意: //付款完成后,支付宝系统发送该交易状态通知 } else if (trade_status == "TRADE_CLOSED")//未付款交易超时关闭,或支付完成后全额退款 { if (isRefund) { //处理退款业务--退款成功 } } Response.Write("success"); //必须输出success } else//验证失败 { Response.Write("failure"); }
不懂的可以在下面留言~ 希望大家可以顺利开发完成。
哥们 如果觉得对你有帮助了,不妨点个赞哈! O(∩_∩)O谢谢。