微信支付

接口声明

  1. {
  2. "name": "service.wxpay",
  3. "params": {
  4. "package": "com.your.package",
  5. "sign": "abcdefg",
  6. "url": "http://your.domain/page"
  7. }
  8. }

manifest 参数说明

微信支付有 app 支付和网页支付两种方式,不同厂商的不同设备可能会支持其中的一种或者两种。为了提升用户体验和兼容不同厂商的设备,建议同时实现这两种方式。如果只想实现其中的一种,请勿配置另外一种支付方式的参数。同时配置两种参数,并且设备都支持的情况下,默认会选择 app 支付。

从1040版本开始,网页支付将支持直接设置referer方式,此方式不再需要实现中间页。原先需要实现中间页跳转的方式还会继续支持。直接设置referer方式需要在pay接口中设置referer参数,pay接口的extra参数中必须配置mweb_url,详见下述参数说明。

厂商实现详见“支持版本明细”。

app 支付

参数说明
package微信支付后台中注册的应用包名,需要和 rpk 中的包名保持一致
sign微信支付后台注册时提交的 apk 的签名的 Base64 编码,该 apk 签名证书需要和 rpk 的签名证书保持一致

网页支付

参数说明
url由开发者提供的 H5 页面,开发者需要在该页面中拉起微信网页支付。当调用微信网页支付接口时,系统会加载该页面,并传入订单信息

导入模块

  1. import wxpay from '@service.wxpay' const wxpay = require('@service.wxpay')

接口定义

wxpay.getType()

获取当前可用的微信支付调用方式

参数:

返回值:

返回值备注
APP微信 app 调用方式,服务端向微信支付下单时,trade_type 需要是 APP,参考微信 app 支付
MWEB微信网页调用方式,服务端向微信支付下单时,trade_type 需要是 MWEB,参考微信网页支付
none微信未安装

注意:getType 返回值为 APP 时,开发者将只能使用 app 方式,不能使用网页方式。

wxpay.pay(OBJECT)

发起微信支付

参数:

参数名类型必填说明
prepayidString微信支付服务器生成的预支付订单 id,参考微信 app 支付微信网页支付
referer 1040+String在微信支付后台配置的域名。从1040版本开始,在使用微信网页方式调用时,若该参数不为空,将通过直接设置referer的方式拉起微信客户端。
extraObject当前支付方式下,需要填入的额外订单信息,具体见下文的 extra 参数说明
successFunction成功后的回调函数,App 方式下,回调发生在用户支付完成之后,网页方式下,回调发生在订单提交给微信 app 之后
failFunction失败回调
cancelFunction取消回调

extra 参数:

app 方式
字段名必选说明
app_id微信支付订单中的 app_id
partner_id微信支付订单中的 partner_id
package_value微信支付订单中的 package_value
nonce_str微信支付订单中的 nonce_str
time_stamp微信支付订单中的 time_stamp
order_sign微信支付订单中的 order_sign
网页方式
字段名必选说明
mweb_url在微信的支付服务器下单以后,微信返回的 MWEB_URL,在 CP 用于微信支付的 h5 页面中,直接将 mweb_url 取出后跳转过去即可,但这个做法并不是强制的,您也可以通过其他自定义键值向您自己的服务器换取 MWEB_URL。从1040版本开始,若使用直接设置referer的方式拉起微信客户端支付,则此参数必选。
custome_key其他的自定义键值,cp 可以根据需要增加其他自己认为需要的键名和键值

success 返回值:

参数名类型说明
prepayidString只在 App 支付方式下会出现,微信支付订单的 prepayId.
final_urlString只在网页方式下会出现,拼接参数之后,最终用于打开网页的 url.

fail 返回错误代码:

错误码说明
900在 manifest.json 中配置的应用签名有误,无法解析
901在 manifest.json 中配置的应用包名有误
1000微信未安装
1001用于微信网页支付的 url 配置找不到
2001订单已经提交给微信,但是微信返回错误, 可能的原因:签名错误、未注册 APPID、项目设置 APPID 不正确、注册的 APPID 与设置的不匹配、其他异常等。

示例

  1. useWxpay () {
  2. var payType = wxpay.getType();
  3. if (payType === 'APP') {
  4. wxpay.pay({
  5. //微信 app支付的prepayId
  6. prepayid: 'your order prepayid,eg: wx20170101abcdef1234567890',
  7. extra: {
  8. app_id: 'your app_id',
  9. partner_id: 'your partner_id',
  10. package_value: 'your package_value',
  11. nonce_str: 'your nonce_str',
  12. time_stamp: 'your time_stamp',
  13. order_sign: 'your order sign'
  14. },
  15. fail: function (data, code) {
  16. console.log(`WX PAY failed, code = ${code}`)
  17. },
  18. cancel: function () {
  19. console.log('WX PAY cancelled by user')
  20. },
  21. success: function (data) {
  22. console.log('WX PAY success')
  23. }
  24. })
  25. } else if (payType === 'MWEB') {
  26. wxpay.pay({
  27. //微信网页支付的prepayId
  28. prepayid: 'your order prepayid,eg: wx20170101abcdef1234567890',
  29. extra: {
  30. //传递给支付页面的自定义参数, 根据需要进行设置, 会被urlEncode之后拼接在配置的url尾部
  31. mweb_url: 'https://wx.tenpay.com/cgi-bin/mmpayweb-bin',
  32. customeKey1: 'customeValue1',
  33. customeKey2: 'customeValue2'
  34. },
  35. fail: function (data, code) {
  36. console.log(`WX H5 PAY handling fail, code = ${code}`)
  37. },
  38. cancel: function () {
  39. console.log('WX H5 PAY handling cancel')
  40. },
  41. success: function (data) {
  42. //H5方式下,支付成功的回调仅仅只是指将订单递交给微信,并不意味着支付已经成功完成
  43. console.log('WX H5 PAY handling success')
  44. }
  45. })
  46. } else {
  47. console.log('WX PAY is not avaliable')
  48. }
  49. }

1040开始,微信网页支付支持直接设置referer方式:

  1. useWxpay () {
  2. var payType = wxpay.getType();
  3. if (payType === 'MWEB') {
  4. wxpay.pay({
  5. // 微信网页支付的prepayId
  6. prepayid: 'your order prepayid,eg: wx20170101abcdef1234567890',
  7. referer: 'your host name configured in wechat, eg: https://www.quickapp.cn',
  8. extra: {
  9. // 需要将微信返回的MWEB_URL地址配置到这里
  10. mweb_url: 'https://wx.tenpay.com/cgi-bin/mmpayweb-bin'
  11. },
  12. fail: function (data, code) {
  13. console.log(`WX H5 PAY handling fail, code = ${code}`)
  14. },
  15. cancel: function () {
  16. console.log('WX H5 PAY handling cancel')
  17. },
  18. success: function (data) {
  19. //H5方式下,支付成功的回调仅仅只是指将订单递交给微信,并不意味着支付已经成功完成
  20. console.log('WX H5 PAY handling success')
  21. }
  22. })
  23. }
  24. }

后台运行限制

禁止使用。后台运行详细用法参见后台运行 脚本

支持明细

厂商支持备注
小米YES-
中兴YES仅支持 MWEB 方式
华为YES仅支持 MWEB 方式
金立YES-
联想no-
魅族YES支持 MWEB 方式;APP 方式需 Flyme 7+
努比亚YES仅支持 MWEB 方式
OPPOYES支持 MWEB 方式;APP 方式需 ColorOS 5.0+,部分机型 ColorOS 3.x+
vivoYES-
一加--
预览版YES仅支持 MWEB 方式