Android客户端三步完成支付宝支付SDK接入

举报
yechaoa 发表于 2022/05/31 00:15:33 2022/05/31
【摘要】 迁移最新版本   1.下载SDK 下载地址:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1 解压并导入jar包,并Add As Library. 2.添加声明 AndroidM...

迁移最新版本

 

1.下载SDK

下载地址:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1

解压并导入jar包,并Add As Library.

2.添加声明

AndroidManifest.xml文件里面添加声明(支付宝客户端调用和H5页面调用)


  
  1. <activity
  2. android:name="com.alipay.sdk.app.H5PayActivity"
  3. android:configChanges="orientation|keyboardHidden|navigation"
  4. android:exported="false"
  5. android:screenOrientation="behind"/>
  6. <activity
  7. android:name="com.alipay.sdk.auth.AuthActivity"
  8. android:configChanges="orientation|keyboardHidden|navigation"
  9. android:exported="false"
  10. android:screenOrientation="behind"/>

3.调用处理

在去支付的按钮点击事件里面加入下面代码

 


  
  1. Runnable payRunnable = new Runnable() {
  2. @Override
  3. public void run() {
  4. //调用支付宝
  5. PayTask payTask = new PayTask(这里是上下文);
  6. String result = payTask.pay(orderBean.payUrl, true);
  7. Message msg = new Message();
  8. msg.what = SDK_PAY_FLAG;
  9. msg.obj = result;
  10. mHandler.sendMessage(msg);
  11. }
  12. };
  13. // 必须异步调用
  14. Thread payThread = new Thread(payRunnable);
  15. payThread.start();

 

payTask.pay(orderBean.payUrl, true)中的orderBean.payUrl是服务器返回给我的数据,也就是支付宝需要的参数(后台封装好的,支付宝也不建议前台去搞),都在里面了,只需要拿数据去请求就行了。

第二个参数true,表示在请求支付的时候是否加入Loading的dialog

 

返回结果在Handler中处理

 


  
  1. @SuppressLint("HandlerLeak")
  2. private Handler mHandler = new Handler() {
  3. @SuppressWarnings("unused")
  4. public void handleMessage(Message msg) {
  5. switch (msg.what) {
  6. case SDK_PAY_FLAG: {
  7. PayResult payResult = new PayResult((String) msg.obj);
  8. String resultInfo = payResult.getResult();// 同步返回需要验证的信息
  9. String resultStatus = payResult.getResultStatus();
  10. if (TextUtils.equals(resultStatus, "9000")) {
  11. MyUtil.showToast("支付成功");
  12. } else {
  13. // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准
  14. if (TextUtils.equals(resultStatus, "8000")) {
  15. MyUtil.showToast("支付结果确认中");
  16. }
  17. else if (TextUtils.equals(resultStatus, "6001")) {
  18. MyUtil.showToast("支付取消");
  19. }
  20. else if (TextUtils.equals(resultStatus, "6002")) {
  21. MyUtil.showToast("网络异常");
  22. }
  23. else if (TextUtils.equals(resultStatus, "5000")) {
  24. MyUtil.showToast("重复请求");
  25. }
  26. else {
  27. // 其他值就可以判断为支付失败
  28. MyUtil.showToast("支付失败");
  29. }
  30. }
  31. break;
  32. }
  33. }
  34. }
  35. };

加入上面的代码就需要一个PayResult 类去接收返回结果了(直接copy下载的sdk中的demo里面的就行)

 

PayResult payResult = new PayResult((String) msg.obj);如果这句报错,就是类型转换的问题,有的是String,有的是Map的,去实体类中改就好了,在类型转换的时候改也行。

 

所以接入支付宝SDK只需要3个步骤:

  • 添加jar包
  • manifest中添加声明
  • 加入上面两段代码和一个实体类

 

以上皆为Android客户端的接入

 


接入中遇到支付失败,code 4000,报错ALI59

按照官网的解决方案去检查了一遍,最后发现是参数格式的问题

支付宝请求参数中的订单总金额单位为元,精确到小数点后两位,如果是10.0000这样的就会报错ALI59,正确10.00

而微信支付的请求参数中的总金额单位为分,对账单中的交易金额单位是为元的。

 

 

文章来源: blog.csdn.net,作者:yechaoa,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/yechaoa/article/details/53543033

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。