微信支付
WechatComponent.pay(WechatOrder order, int requestCode, Activity activity)
WechatOrder 字段说明
参数 | 类型 | 必填 | 参数描述 |
---|---|---|---|
totalCost | float | Y | 支付总额,单位:元 |
merchandiseDescription | String | Y | 微信支付凭证-商品详情的内容 |
merchandiseSchemaId | String | N | 商品数据表 ID,可用于定位用户购买的物品 |
merchandiseRecordId | String | N | 商品数据行 ID,可用于定位用户购买的物品 |
举例:开发者有一个 Article 表, 里面有免费 / 付费的文章, 当用户对一篇付费文章进行支付时, 则可以将 Article 表的 ID 作为 merchandiseSchemaId
, 文章记录的 ID 作为你 merchandiseRecordId
传入到 WechatComponent.pay(…)
写进支付订单记录。当用户阅读此付费文章时, 则可以通过 merchandiseSchemaId
, merchandiseRecordId
来查询用户是否付费。
返回参数说明
参数 | 类型 | 说明 |
---|---|---|
exception | Exception | 支付过程中发生异常(非用户主动取消) |
orderInfo | WechatOrderResp | 后台成功创建的预付单 |
payResp | PayResp | 如果微信 sdk 返回了信息,则保存在这里 |
示例代码
// 发起一次 398 元的支付请求
WechatComponent.pay(new WechatOrder(398f, "知晓云充值-微信支付"), SEND_WX_ORDER, this);
// 此 api 会打开对应的透明页面,并在此透明页面里与服务端通讯和拉起支付页面
// 在 onActivityResult 里接收支付结果
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode) {
case SEND_WX_ORDER:
if (resultCode == RESULT_OK) {
WechatOrderResult result = WechatComponent.getOrderResultFromData(data);
// 支付失败了,这里拿到异常,做日志,并提示用户
if (result.getException() != null) {
result.getException();
} else {
// 支付成功,这里可以拿到知晓云服务端返回的信息,以及微信 app 返回的原始信息以供查验
result.getOrderInfo();
result.getPayResp();
}
} else {
// 用户取消了支付
}
break;
}
}
支付成功知晓云服务端返回示例(WechatOrderResp)
{
"appid": "wx4b3c1aff4c5389f5",
"noncestr": "1i0H34lIcvRCOKj3PqqJJvBW9GAZZlQu",
"package": "Sign\u003dWXPay",
"partnerid": "1488522312",
"prepayid": "wx211112349689781031d1fba61664632900",
"sign": "0002B59A1314F60158989088E68B0D4B",
"timestamp": "1566357154",
"trade_no": "1i0H346yszNaceD5efLzlAizmA7zlIb6",
"transaction_no": "wM6Oy0VjDvpOPa5mR7dtuWmjia7NFcxZ"
}
接口说明
支付模式图-来自微信官方
WechatComponent.pay(…)
实际上做了发起支付统一下单请求,及拉起微信支付页面等操作。开发者只需要调用 WechatComponent.pay(…)
, 传入必填参数即可发起微信支付。用户感知到的现象就是, 点击付款按钮,弹出支付弹框, 要求用户输入密码, 用户输入正确的密码后完成支付流程, 停在支付结果页。用户可在支付结果页点击返回商家按钮回到支付前界面。