Android app集成支付宝支付

支付宝支付

  • 其实是比较简单的,但因为发起订单总是失败,经过各种测试、排除,最终确定是服务端返回数据有误造成的。所以严格来说支付宝文档等没有什么问题,问题在于后端程序员不认真看文档和测试。
  • 申请id需要的应该是微信支付一致,也是需要包名和md5签名,可能也是需要先上架应用商店。
  • 文档地址:https://opendocs.alipay.com/open/204/105051,[APP支付接入流程]: https://opensupport.alipay.com/support/helpcenter/87/201602491089?ant_source=opendoc_recommend。
  • 服务端文档:https://opendocs.alipay.com/open/54/103419。

集成sdk

  • sdk和demo:https://opendocs.alipay.com/open/04km1h。

  • 使用的是gradle文件添加,未主动下载sdk。参考文档:[客户端 Android 集成流程]:https://opendocs.alipay.com/open/204/105296/

分析bug

  • 输出日志,确定请求支付返回4000。查看文档中的常见问题,找到:
    在这里插入图片描述

  • 当时手机未安装支付宝app,测试安装后可以打开支付宝(未登录,所以没有返回4000,也没有测试是否可以支付成功)。后来测试登录支付宝后支付也是失败(但是没有返回4000,弹窗"交易订单处理失败,请稍后再试。“,应该是支付宝的弹窗。点击确定后返回6001,表示取消订单。)。而未安装支付宝app时返回4000,弹窗"订单创建失败,请重试”,这个弹窗是自己的代码弹窗的,正确的逻辑应该是打开h5的支付页面。

  • 然后下面的问题列表也有:
    在这里插入图片描述

  • 核心就是配置"com.alipay.sdk.app.H5PayActivity"这个activity。但是查看引用的aar是15.8.11版本,aar的xml中配置了,而且反编译生成的apk也确实是存在activity。所以一开始怀疑是不是因为activity的配置不完全一致造成的?测试主动在xml中加入activity,因为android:configChanges产生冲突,无法编译,只能去除android:configChanges属性。测试还是无法打开h5支付页面。

  • 搜索这个问题,大部分都是和文档里说的一样:主动添加activity。有一个说是需要在新线程里执行,我对照着文档和demo的代码,猜测不是这个问题,因为本身执行这段代码的已经是新线程了,而且测试再新创建一个线程执行还是同样的错误。搜索到的还有一个:https://blog.csdn.net/qijingwang/article/details/102739536,说是org.apache.http.legacy的问题,测试添加后依然不能解决。而且其实aar的xml中本来就已经存在org.apache.http.legacy了,不需要主动添加。

  • 最终无奈编译官方的demo,但是运行需要id、密钥等信息,后端程序员根本没有给我这些信息。

  • 翻看demo代码,发现是本地拼接的字符串orderStr,格式是:键值对以"=“号连接,相邻的键值对使用”&"连接。而查看服务端返回的数据,解密后是一个带双引号的字符串:

    "alipay_sdk=alipay-sdk-PHP-4.11.14.ALL&app_id=2021003...2912&biz_conte..."
    
  • 错误1:解密后是字符串,但不应该是带双引号的字符串,这样就需要手动取出双引号内的字符串,但是直接取出,不能确保是否存在需要去除转义的字符。

  • 错误2:相邻的键值对应该使用"&“连接,而不是加上"amp;”。

  • 文档中有orderStr的例子。
    在这里插入图片描述

在这里插入图片描述

  • 而且php的demo中应该指出了可能存在转义的情况:https://opendocs.alipay.com/open/54/106370

在这里插入图片描述

  • 所以如果真的认真看文档了,或者测试了,或者参考已经有的项目,还没有发现这两个错误,那就真的是太不负责任了。对后端程序员完全失望了,此类的错误已经不是2、3次了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值