源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)

  • 时间:2022-04-21 06:29 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)
一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一。 笔者在此总结了下阿里旗下支付宝Android SDK支付的接入流程,供后来者参考。 接入流程如下: [b]1 签约成为支付宝商户[/b] 签约地址:[url=https://b.alipay.com/]https://b.alipay.com/[/url],  只有成为签约商户的开发者才能具备集成支付宝app支付的资格。  签约资料:1)营业执照 2)APP说明文档 3)商户经营信息、商户联系人等信息  必要时还需提供APP apk以备审核。审核通过后即可进行代码集成。 审核通过后,可得到支付宝分配的商户号等信息。 [b]2 客户端代码集成准备[/b] 2.1 导入jar包资源 目前最新版支付宝开发jar包下载地址:[url=http://xiazai.jb51.net/201611/yuanma/alipaySdk_jb51.jar]http://xiazai.jb51.net/201611/yuanma/alipaySdk_jb51.jar[/url] 下载后将之拷贝libs目录,Eclipse会自动添加依赖,Android Studio需在app的gradle中添加一行
compile files('libs/alipaySdk-20160223.jar')
点击右上角:Sync Now,稍等片刻 [b]2.2 修改AndroidManifest.xml清单[/b] 声明必要Activity
<activity
      android:name="com.alipay.sdk.app.H5PayActivity"
      android:configChanges="orientation|keyboardHidden|navigation"
      android:exported="false"
      android:screenOrientation="behind" >
</activity>
<activity
      android:name="com.alipay.sdk.auth.AuthActivity"
      android:configChanges="orientation|keyboardHidden|navigation"
      android:exported="false"
      android:screenOrientation="behind" >
 </activity>
 添加必要权限
 <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
[b]2.3 添加支付宝混淆规则[/b]
-libraryjars libs/alipaySDK-20160223.jar
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
[b]3 客户端代码集成[/b] 支付宝交互流程示意图[img]http://files.jb51.net/file_images/article/201611/20161125144740475.png?20161025144749[/img] 流程图白话版解释 1.app携带支付信息调用支付接口请求支付宝客户端调起支付界面; 2.用户操作,输入密码支付,支付成功;直接返回取消支付;出现错误,支付失败;进入支付界面,但输入密码支付,支付待确认; 3.支付宝客户端将支付结果告诉app客户端,商户服务器通知app服务器支付结果; 4.app客户端处理支付结果; 5.app服务器处理支付结果。 支付宝的支付流程较之微信的支付流程图少了一步app服务器端订单的生成,但是在其demo代码中是推荐使用app服务器进行sign签名过程的,于是笔者索性是按照的微信支付的流程(微信支付交互流程)去集成的。 •客户端代码得到用户购买的商品信息,将之传给自己公司app服务器,参数包含但不限于以下:
params.put("money", payMoney);// 商品金额,单位:元
params.put("goodsname", goodsName);// 商品名称
[b]注意:[/b]支付宝支付的人民币单位和微信支付,银联支付稍有不同,需以:元 作为支付单位。其他两者支付单位为:分  其他参数均交给咱们app服务器处理即可,详细参数请点击:[url=https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103663&docType=1]https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103663&docType=1[/url] •app服务器参考上述详细参数链接,得到sign(支付签名信息)字段并返回sign字段给手机客户端; •手机客户端使用sign签名信息在非UI线程调起支付客户端进行支付;  用户操作:输入密码进行支付;返回键取消支付;进入支付界面,用户未进行支付,用户返回,待支付;网络无连接支付失败等; •客户端得到支付结果; •支付宝服务器异步通知咱们公司app服务器支付结果(服务器的工作,与客户端无关) 这样做的好处:签名逻辑在服务器完成,app无需暴露公钥和私钥,更安全。同时也是demo中的推荐做法。 更详细的支付宝接入交互流程解释请点击:[url=https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.7WO30X&treeId=59&articleId=103658&docType=1]https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.7WO30X&treeId=59&articleId=103658&docType=1[/url] [b]4 客户端代码示例[/b] 支付调起代码(须在子线程)
new Thread() {
          @Override
          public void run() {
            super.run();
            PayTask payTask = new PayTask(mActivity);
            String result = payTask.pay(signInfo, true);
            Message message = mHandler.obtainMessage();
            message.what = PAY_RESULT;
            message.obj = result;
            mHandler.sendMessage(message);
          }
        }.start();
支付处理代码(UI线程)  
 /*支付宝支付结果码*/
  private static final String PAY_OK = "9000";// 支付成功
  private static final String PAY_WAIT_CONFIRM = "8000";// 交易待确认
  private static final String PAY_NET_ERR = "6002";// 网络出错
  private static final String PAY_CANCLE = "6001";// 交易取消
  private static final String PAY_FAILED = "4000";// 交易失败

  /*内部类,处理支付宝支付结果*/
  static class AliPayHandler extends Handler {
    private SoftReference<PayActivity> activitySoftReference;// 使用软引用防止内存泄漏

    public AliPayHandler(PayActivity activity) {
      activitySoftReference = new SoftReference<PayActivity>(activity);
    }

    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
      PayActivity activity = activitySoftReference.get();

      AliPayResult payResult = new AliPayResult((String) msg.obj);
      String resutStatus = payResult.getResultStatus();
      Log.d(TAG, "statusCode = " + resutStatus);

      if (resutStatus.equals(PAY_OK)) {
        activity.paySuccessed();
      } else if (resutStatus.equals(PAY_CANCLE)) {
        activity.payCanceled();
      } else if (resutStatus.equals(PAY_NET_ERR)) {
        activity.payFailed(NETWORK_ERR);
      } else if (resutStatus.equals(PAY_WAIT_CONFIRM)) {
        activity.payWaitConfirm();
      } else {
        activity.payFailed(UNKNOW_ERR);
      }
    }
  }

注:AliPayResult.Java来自支付宝demo中的PayResult.java 至此,集成支付宝SDK结束。祝各位集成支付宝支付成功! [b]结束语[/b] app服务器接入注意事项:官方给出的填写rsa公钥的地址有误,无论填写什么都提示:公钥格式错误。需要移步至:支付宝公钥填写正确地址填写 按照惯例,附上支付宝SDK接入的官方demo下载链接:[url=https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1]https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1[/url] 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部