背景 我们一个客户使用了微信小程序和支付宝生活号两种方式进行商品的介绍和收款,前期只开通支付宝alipay.trade.wap.pay的支付方式,后期也会上微信的jsapi支付
问题 众所周知,在微信中不能使用支付宝相关的链接,在支付时会提示你使用浏览器打开,我们的客户认为这样的方式如果可以支付成功,前期也就先将就着这样用 可问题是使用浏览器打开后,支付宝报签名错误。但是相同的链接,商户号、参数什么的都相同,在支付宝生活号中却可以正常支付,这是为什么?
根据支付宝官方提供的文档的建议:
TIPS:这一步应在商户服务端完成,商户服务端直接将组装和签名后的请求串orderString传给客户端,客户端直接传给SDK发起请求。文档和Demo是为了示例效果在客户端实现。
商品的订单信息和签名应该放在服务端进行,将最好生成的orderString发送给客户端,客户端直接换起支付,处理好回调就ok。思路很简单,但实现却要下番功夫。
坑一:
如果以PHP为服务后台为例,官网是没有提供集成好的PHP运行DEMO,我们的处理方式是参展APPDemo里的思路,和官方文档的流程介绍,自己写一套方法。
坑二:
在整合商品信息biz_content的时候要主要几个字端:
1)method = “alipay.trade.app.pay";
注意:官方提供的PHP有给APP整合信息方法,但里面使用的是“alipay.trade.wap.pay",这个字端不适用于APP支付,这点要注意。
2)timestamp 的格式
注意:这里格式是年月日...到秒,并不是时间戳。
3)total_amount 的位数
注意:这里商品单价是精确到小数点后2位的,例如:7.00 和微信不同。
4)charset = utf-8
注意:这里“utf-8”要小写,不是大写。
坑三:
疯狂的报错
当接口写好后,服务端和终端进行联调,这里就比较蛋疼了。首先,过程很繁琐,不能本地模拟测试,只能由终端发起,查看返回的错误信息去寻找问题,很不好确定错误的位置。
下面是我们在开发中遇到错误代码以及解决方法,希望给你些有用的建议。
1)支付宝客户端返回6001错误信息或显示交易订单处理失败,请稍后再试。(ALI64)
原因:没有在合作伙伴身份中设置公钥。(注:接入支付宝需要在服务端设置应用私钥和支付宝公钥,在支付宝管理后台设置应用公钥和合作伙伴公钥,应用公钥与私钥即为自己通过openssl生成的公钥与私钥;支付宝公钥可通过支付宝管理后台得到,是固定值;合作伙伴公钥即为应用公钥)
2)支付繁忙ALI59
原因:主要情况为 amount等参数中 有特殊字符 导致, 在此处打个断点 po 一下相应的参数就好了
3)“暂时无法获取订单信息,请稍后再试”
原因:签名错误。没有严格按照文档里的签名方式,&sign=AD3,前面要用“&”和加密(encode)后的字符相连,并且后面不能带双引号“”。
4)支付宝调起出现 ALI40247 解决方案
原因:这里卡的实现最长。也找了很多文档。总结了一下错误的原因有几下几点:
A.没有APP支付权限导致
检查您使用的这个appid是否签约过APP支付这个接口的权限。如果没有签约看上面的《如何签约APP支付接口》。这里比较隐蔽。大多数以为申请通过就代表有了支付能力,其实还需再做一步签约。
B.请求支付编码问题和没有做url encode
编码:就是请求了utf-8 但是用了gbk的编码
encode:app支付接口(接口名称:alipay.trade.app.pay)对请求字符串的所有一级value(biz_content作为一个value)进行encode。
C.管理中心》我的应用》状态》(注意:)已上线才可以使用否则也会报这个错误
D.详细可参见地址https://openclub.alipay.com/read.php?tid=250&fid=2 官方提供的解决方案。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。