IOS理论知识

支付宝支付流程。

2017-09-07  本文已影响70人  IceWall_Rin

1.流程:1.app下订单提交给后台服务器生成订单信息,带有签名。2.提交上述返回数据到支付宝,唤起支付。3.支付宝向app返回支付结果。向服务端异步返回支付结果。

2.关于应用私钥和支付宝公钥

关于私钥,官方要求一定不能放到app客户端。

一定要配对。所谓配对就是选择一种算法的私钥,要使用对应的支付宝公钥。

在以前的api中,签名是在app端完成的。最新的api已不建议这样做。目前最新版本是15.3.5。签名放在服务器端完成,由服务器按照规则返回一个字符串。app端拿着这个串去调用支付宝支付。

需要注意的是,支付需要app状态是上线状态,否则只能使用沙箱测试。具体请看相关文档。

3.支付关键代码:

/**    * 支付宝支付    *@paramorderInfo    */privatevoidaliPay(finalString orderInfo){        Runnable payRunnable =newRunnable() {@Overridepublicvoidrun() {                PayTask alipay =newPayTask(getActivity());                Map result = alipay.payV2(orderInfo,true);                Message msg =newMessage();                msg.what =SDK_ALI_PAY_FLAG;                msg.obj = result;                mHandler.sendMessage(msg);            }        };        Thread payThread =newThread(payRunnable);        payThread.start();    }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

privateHandler mHandler =newHandler() {@SuppressWarnings("unused")publicvoidhandleMessage(Message msg) {switch(msg.what) {caseSDK_ALI_PAY_FLAG: {//支付宝支付PayResult payResult =newPayResult((Map) msg.obj);/**对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。*/String resultInfo = payResult.getResult();// 同步返回需要验证的信息String resultStatus = payResult.getResultStatus();// 判断resultStatus 为9000则代表支付成功if(TextUtils.equals(resultStatus,"9000")) {// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。Toast.makeText(mContext,"支付成功", Toast.LENGTH_SHORT).show();                        getActivity().finish();                    }else{// 该笔订单真实的支付结果,需要依赖服务端的异步通知。Toast.makeText(mContext,"支付失败"+payResult.getResultStatus()+payResult.getResult(), Toast.LENGTH_LONG).show();                    }break;                }                ....          }      }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

如果你的项目中使用了混淆,还需做一下配置:

#支付宝支付混淆 sdk15.3.5-keep classcom.alipay.android.app.IAlixPay{*;}-keep classcom.alipay.android.app.IAlixPay$Stub{*;}-keep classcom.alipay.android.app.IRemoteServiceCallback{*;}-keep classcom.alipay.android.app.IRemoteServiceCallback$Stub{*;}-keep classcom.alipay.sdk.app.PayTask{ public *;}-keep classcom.alipay.sdk.app.AuthTask{ public *;}-dontwarncom.alipay.**

1

2

3

4

5

6

7

8

9

很简单。有空完善整个流程说明及详细的流程说明。

上一篇下一篇

猜你喜欢

热点阅读