codecamp

快应用 微信支付

接口声明

{
  "name": "service.wxpay",
  "params": {
    "package": "com.your.package",
    "sign": "abcdefg",
    "url": "http://your.domain/page"
  }
}

manifest参数说明

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

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

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

app支付

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

网页支付

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

导入模块

import wxpay from '@service.wxpay' 
或 
uire('@service.wxpay')

接口定义

wxpay.getType()

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

参数:

返回值:

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

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

wxpay.pay(OBJECT)

发起微信支付

参数:

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

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
custome_key 其他的自定义键值,cp 可以根据需要增加其他自己认为需要的键名和键值

success返回值:

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

fail返回错误代码:

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

示例

useWxpay () {
  var payType = wxpay.getType();
  if (payType === 'APP') {
    wxpay.pay({
      //微信 app支付的prepayId
      prepayid: 'your order prepayid,eg: wx20170101abcdef1234567890',
      extra: {
        app_id: 'your app_id',
        partner_id: 'your partner_id',
        package_value: 'your package_value',
        nonce_str: 'your nonce_str',
        time_stamp: 'your time_stamp',
        order_sign: 'your order sign'
      },
      fail: function (data, code) {
        console.log(`WX PAY failed, code = ${code}`)
      },
      cancel: function () {
        console.log('WX PAY cancelled by user')
      },
      success: function (data) {
        console.log('WX PAY success')
      }
    })
  } else if (payType === 'MWEB') {
    wxpay.pay({
      //微信网页支付的prepayId
      prepayid: 'your order prepayid,eg: wx20170101abcdef1234567890',
      extra: {
        //传递给支付页面的自定义参数, 根据需要进行设置, 会被urlEncode之后拼接在配置的url尾部
        mweb_url: 'https://wx.tenpay.com/cgi-bin/mmpayweb-bin',
        customeKey1: 'customeValue1',
        customeKey2: 'customeValue2'
      },
      fail: function (data, code) {
        console.log(`WX H5 PAY handling fail, code = ${code}`)
      },
      cancel: function () {
        console.log('WX H5 PAY handling cancel')
      },
      success: function (data) {
        //H5方式下,支付成功的回调仅仅只是指将订单递交给微信,并不意味着支付已经成功完成
        console.log('WX H5 PAY handling success')
      }
    })
  } else {
    console.log('WX PAY is not avaliable')
  }
}


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

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

后台运行限制

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

支持明细

厂商支持备注
小米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 方式


快应用 广告
快应用 支付宝支付
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

快应用 参考手册

快应用 安全

快应用 声音音频

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }