实现流程:
后台创建订单>调用支付宝生成支付宝参数 >拼接组合头条需要参数>返回前端调用requestPayment>支付成功
1.后台业务处理,生成订单号和金额
2.调用支付宝app支付接口 https://docs.open.alipay.com/204/105465/
支付宝sdk下载地址 https://docs.open.alipay.com/54/106370/
c#代码示例:
IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", APPID, APP_PRIVATE_KEY, "json", "1.0", "RSA2", ALIPAY_PUBLIC_KEY, CHARSET, false);
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.Body = "我是测试数据";
model.Subject = "App支付测试DoNet";
model.TotalAmount = "0.01";
model.ProductCode = "QUICK_MSECURITY_PAY";
model.OutTradeNo = "20170216test01";
model.TimeoutExpress = "30m";
request.SetBizModel(model);
request.SetNotifyUrl("外网商户可以访问的异步地址");
//这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = client.SdkExecute(request);
//HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
Response.Write(HttpUtility.HtmlEncode(response.Body));
//页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。
3.拼接组合头条需要参数
采用排序的Dictionary的好处是方便对数据包进行签名,不用再签名之前再做一次排序
Dictionary<string, string> data = new Dictionary<string, string>();
data["app_id"] = app_id;
data["sign_type"] = "MD5";
data["timestamp"] = timestamp;
data["trade_no"] = 订单号;
data["merchant_id"] = merchant_id;
data["uid"] = uid;
data["total_amount"] = 金额;
data["params"] = "{\"url\":\"" + response.Body + "\"}";
//排序
string PrepareSign = getParamSrc(data, false);
//md5签名
data["sign"] = MakeSign(PrepareSign, ttSecret);
data["method"] = "tp.trade.confirm";
data["pay_channel"] = "ALIPAY_NO_SIGN";
data["pay_type"] = "ALIPAY_APP";
data["risk_info"] = "{\"ip\":" + 获取Ip地址+ "}";
//data返回给前端调用
4.前端调用 http://developer.toutiao.com/docs/open/requestPayment.html
requestPayment 发起头条支付的方法,根据后端返回参数调用支付宝支付
5.用户支付完成,回调可以加支付处理记得去支付宝验证支付状态,支付宝回调记得处理
注意事项:
ALIN10146
1、请求appid应用未上线,联调时请确保自己的应用是上线状态;
2、签约权限问题,请确保自己已经签约并审核通过;
3、签名类型使用错,2018年1月5号之后创建的应用类型请使用RSA2,sign_type=RSA2;
4、请求参数问题,请检查自己的请求参数格式是否按照文档要求传输的。
ALI38173
报错描述:报错ALI 38173
报错原因:
1、请求参数问题
2、密钥问题
3、乱码问题
4、没有签约该接口
解决方案:
1、检查请求参数中是否多了 “amp;”,将其去掉重新测试;
2、检查参数是否与文档不符之处,是否有传自定义参数,或者必传参数未传;
3.检查密钥格式是否正确:java使用pkcs8格式密钥,非java语言,必须使用pkcs1格式密钥;
4、检查公私钥是否匹配;
5、编码格式是否有误,是否有乱码;
6、检查是否签约,并且添加功能;
调起支付宝过程中的相应错误可以去支付宝找解决方案