当前位置: 移动技术网 > IT编程>移动开发>Android > Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

杨成熙,黄骅62名干部被辞职事件,潍坊汽车站

一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一。

笔者在此总结了下阿里旗下支付宝android sdk支付的接入流程,供后来者参考。

接入流程如下:

1 签约成为支付宝商户

签约地址:, 

只有成为签约商户的开发者才能具备集成支付宝app支付的资格。 

签约资料:1)营业执照 2)app说明文档 3)商户经营信息、商户联系人等信息 

必要时还需提供app apk以备审核。审核通过后即可进行代码集成。

审核通过后,可得到支付宝分配的商户号等信息。

2 客户端代码集成准备

2.1 导入jar包资源

目前最新版支付宝开发jar包下载地址:

下载后将之拷贝libs目录,eclipse会自动添加依赖,android studio需在app的gradle中添加一行

compile files('libs/alipaysdk-20160223.jar')

点击右上角:sync now,稍等片刻

2.2 修改androidmanifest.xml清单

声明必要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" />

2.3 添加支付宝混淆规则

-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 *;}

3 客户端代码集成

支付宝交互流程示意图

流程图白话版解释

1.app携带支付信息调用支付接口请求支付宝客户端调起支付界面;

2.用户操作,输入密码支付,支付成功;直接返回取消支付;出现错误,支付失败;进入支付界面,但输入密码支付,支付待确认;

3.支付宝客户端将支付结果告诉app客户端,商户服务器通知app服务器支付结果;

4.app客户端处理支付结果;

5.app服务器处理支付结果。

支付宝的支付流程较之微信的支付流程图少了一步app服务器端订单的生成,但是在其demo代码中是推荐使用app服务器进行sign签名过程的,于是笔者索性是按照的微信支付的流程(微信支付交互流程)去集成的。

•客户端代码得到用户购买的商品信息,将之传给自己公司app服务器,参数包含但不限于以下:

params.put("money", paymoney);// 商品金额,单位:元
params.put("goodsname", goodsname);// 商品名称

注意:支付宝支付的人民币单位和微信支付,银联支付稍有不同,需以:元 作为支付单位。其他两者支付单位为:分
 其他参数均交给咱们app服务器处理即可,详细参数请点击:https://doc.open.alipay.com/doc2/detail?treeid=59&articleid=103663&doctype=1

•app服务器参考上述详细参数链接,得到sign(支付签名信息)字段并返回sign字段给手机客户端;

•手机客户端使用sign签名信息在非ui线程调起支付客户端进行支付;
 用户操作:输入密码进行支付;返回键取消支付;进入支付界面,用户未进行支付,用户返回,待支付;网络无连接支付失败等;

•客户端得到支付结果;

•支付宝服务器异步通知咱们公司app服务器支付结果(服务器的工作,与客户端无关)

这样做的好处:签名逻辑在服务器完成,app无需暴露公钥和私钥,更安全。同时也是demo中的推荐做法。

更详细的支付宝接入交互流程解释请点击:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.7wo30x&treeid=59&articleid=103658&doctype=1

4 客户端代码示例

支付调起代码(须在子线程)

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结束。祝各位集成支付宝支付成功!

结束语

app服务器接入注意事项:官方给出的填写rsa公钥的地址有误,无论填写什么都提示:公钥格式错误。需要移步至:支付宝公钥填写正确地址填写

按照惯例,附上支付宝sdk接入的官方demo下载链接:https://doc.open.alipay.com/doc2/detail.htm?treeid=54&articleid=104509&doctype=1

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网