微信支付

WechatComponent.pay(WechatOrder order, int requestCode, Activity activity)

WechatOrder 字段说明

参数类型必填参数描述
totalCostfloatY支付总额,单位:元
merchandiseDescriptionStringY微信支付凭证-商品详情的内容
merchandiseSchemaIdStringN商品数据表 ID,可用于定位用户购买的物品
merchandiseRecordIdStringN商品数据行 ID,可用于定位用户购买的物品

举例:开发者有一个 Article 表, 里面有免费 / 付费的文章, 当用户对一篇付费文章进行支付时, 则可以将 Article 表的 ID 作为 merchandiseSchemaId, 文章记录的 ID 作为你 merchandiseRecordId 传入到 WechatComponent.pay(…) 写进支付订单记录。当用户阅读此付费文章时, 则可以通过 merchandiseSchemaId, merchandiseRecordId 来查询用户是否付费。

返回参数说明

参数类型说明
exceptionException支付过程中发生异常(非用户主动取消)
orderInfoWechatOrderResp后台成功创建的预付单
payRespPayResp如果微信 sdk 返回了信息,则保存在这里

示例代码

  1. // 发起一次 398 元的支付请求
  2. WechatComponent.pay(new WechatOrder(398f, "知晓云充值-微信支付"), SEND_WX_ORDER, this);
  3. // 此 api 会打开对应的透明页面,并在此透明页面里与服务端通讯和拉起支付页面
  4. // 在 onActivityResult 里接收支付结果
  5. @Override
  6. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  7. switch (requestCode) {
  8. case SEND_WX_ORDER:
  9. if (resultCode == RESULT_OK) {
  10. WechatOrderResult result = WechatComponent.getOrderResultFromData(data);
  11. // 支付失败了,这里拿到异常,做日志,并提示用户
  12. if (result.getException() != null) {
  13. result.getException();
  14. } else {
  15. // 支付成功,这里可以拿到知晓云服务端返回的信息,以及微信 app 返回的原始信息以供查验
  16. result.getOrderInfo();
  17. result.getPayResp();
  18. }
  19. } else {
  20. // 用户取消了支付
  21. }
  22. break;
  23. }
  24. }

支付成功知晓云服务端返回示例(WechatOrderResp)

  1. {
  2. "appid": "wx4b3c1aff4c5389f5",
  3. "noncestr": "1i0H34lIcvRCOKj3PqqJJvBW9GAZZlQu",
  4. "package": "Sign\u003dWXPay",
  5. "partnerid": "1488522312",
  6. "prepayid": "wx211112349689781031d1fba61664632900",
  7. "sign": "0002B59A1314F60158989088E68B0D4B",
  8. "timestamp": "1566357154",
  9. "trade_no": "1i0H346yszNaceD5efLzlAizmA7zlIb6",
  10. "transaction_no": "wM6Oy0VjDvpOPa5mR7dtuWmjia7NFcxZ"
  11. }

接口说明

支付模式图-来自微信官方支付模式图-来自微信官方

WechatComponent.pay(…) 实际上做了发起支付统一下单请求,及拉起微信支付页面等操作。开发者只需要调用 WechatComponent.pay(…) , 传入必填参数即可发起微信支付。用户感知到的现象就是, 点击付款按钮,弹出支付弹框, 要求用户输入密码, 用户输入正确的密码后完成支付流程, 停在支付结果页。用户可在支付结果页点击返回商家按钮回到支付前界面。