开发

支付能力说明

功能说明

目前支持三种支付方式: 度小满支付支付宝支付微信H5支付

需要的具体实现

需要注意的是,小程序支付只是给小程序开发者提供一个支付通道,所有和订单相关的信息都由小程序开发者生成和提供,小程序宿主只是提供通道,不需要额外注册商户号等等

所有的接口都封装在ISwanAppPayment当中,对应SwanAppPaymentImpl中的方法需要宿主开发者来实现,以下是具体实现

度小满支付

需要实现SwanAppPaymentImpl#baiduPay(SwanApp, String, BaiduPayCallback)方法完成调起支付流程,以及在支付完成时收到回调,发送给小程序开发者处理。
实现参考文档: https://b.baifubao.com/static/spcenter/fe-wallet-open-platform/entry/develop-document/#/document?mdUrl=5bc5d6183c21af3fda3abc6e

具体实现如下:

集成度小满SDK,SDK下载地址:https://b.baifubao.com/static/spcenter/fe-wallet-open-platform/entry/develop-document/#/download 安卓集成包,需要完成所有的集成操作,在上面的文档中已经写明,不再赘述
API初始化:
Application#onCreate()里调用以下API。

1
BaiduWallet.getInstance().initWallet(Context context)

支付:
1
BaiduWallet.getInstance().doPay(Context context, String orderInfo, new PayCallBack callback)

回调:
PayCallBack#onPayResult(int, String)中的结果传给BaiduPayCallback#onBaiduPayResult(int, String)

注意:
发起支付需要在主进程中进行,不然可能会收不到支付回调信息,sdk已经提供了ActivityDelegation类处理主进程和小程序进程的交互,可以继承ActivityDelegation进行处理

支付宝支付

需要实现SwanAppPaymentImpl#aliPay(String, AliPayCallback)方法完成调起支付流程,以及在支付完成时收到回调,发送给小程序开发者处理。
实现参考文档:https://docs.open.alipay.com/204/105296/

具体实现如下:

集成支付宝SDK,SDK下载地址:https://docs.open.alipay.com/54/104509 选择您合适的sdk接入,需要完成所有的集成操作,在前面的文档中已经写明,不再赘述

支付:
SwanAppPaymentImpl#aliPay(String, AliPayCallback)中实现支付宝文档中的调起操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
final String orderInfo = info;   // 订单信息

Runnable payRunnable = new Runnable() {

@Override
public void run() {
PayTask alipay = new PayTask(DemoActivity.this);
String result = alipay.payV2(orderInfo,true);

Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();

回调:

1
2
3
4
5
6
7
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
Result result = new Result((String) msg.obj);
Toast.makeText(DemoActivity.this, result.getResult(),
Toast.LENGTH_LONG).show();
};
};

支付宝的回调结构参考文档:https://docs.open.alipay.com/204/105301/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"memo" : "xxxxx",
"result" : "{
\"alipay_trade_app_pay_response\":{
\"code\":\"10000\",
\"msg\":\"Success\",
\"app_id\":\"2014072300007148\",
\"out_trade_no\":\"081622560194853\",
\"trade_no\":\"2016081621001004400236957647\",
\"total_amount\":\"0.01\",
\"seller_id\":\"2088702849871851\",
\"charset\":\"utf-8\",
\"timestamp\":\"2016-10-11 17:43:36\"
},
\"sign\":\"NGfStJf3i3ooWBuCDIQSumOpaGBcQz+aoAqyGh3W6EqA/gmyPYwLJ2REFijY9XPTApI9YglZyMw+ZMhd3kb0mh4RAXMrb6mekX4Zu8Nf6geOwIa9kLOnw0IMCjxi4abDIfXhxrXyj********\",
\"sign_type\":\"RSA2\"
}",
"resultStatus" : "9000"
}

将上述结构中的resultStatus和result传给AliPayCallback#onAliPayResult(int, String)

需要注意一点,支付宝的返回参数和小程序要求的不太一样,需要宿主进行一次参数映射转换,转换结构如下:

支付宝 智能小程序
9000 0
8000 1
6001 2
其他 6

注意:
发起支付需要在主进程中进行,不然可能会收不到支付回调信息,sdk已经提供了ActivityDelegation类处理主进程和小程序进程的交互,可以继承ActivityDelegation进行处理

微信h5支付

微信h5支付的大部分功能已经实现,只需要在SwanAppPaymentImpl#isWxAppInstalledAndSupported(Context)中判断微信是否可用就可以

具体实现如下:
需要集成微信sdk,接入参考文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN
sdk下载文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN

判断当前微信状态是否可用
参考代码:

1
2
3
IWXAPI wxApi = WXAPIFactory.createWXAPI(context, null);
wxApi.registerApp(PassportDevelop.WX_APPID);
return wxApi.isWXAppInstalled() && wxApi.isWXAppSupportAPI();

注意,集成微信sdk需要宿主向微信申请过appid,即上述代码中的PassportDevelop.WX_APPID