文档管理中心
API参考快应用API第三方平台微信支付

微信支付

注意

该功能依赖第三方SDK提供服务,第三方SDK可能会收集用户的个人数据。应用中请务必在使用该功能前,告知用户将搜集个人数据,并引导用户阅读相应的隐私政策。

微信支付支持两种接入支付方式:app支付接入和网页支付接入。

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

app支付接入

注意

华为手机目前不支持app支付,如果您的快应用仅在华为推广,请勿接入app支付。

  1. 参见“微信app支付”,完成微信支付服务端的接入。
  2. 在微信支付后台添加一个新的app,该app需要有一个新的包名,不要和自己原生app应用的包名冲突,不需要对外发布,但是需要提交一个apk,以注册新的包名和对应的app签名。
  3. 将新注册的app包名和app签名(签名的值可以在安装新注册的apk后使用工具获取)的值,分别填在manifest.json微信支付接口声明的package和sign两个字段中。
    {"name": "service.wxpay", "params": {"package": "com.your.package", "sign": "abcdefg", "url": "https://your.domain/page"}}
  4. 导入模块:在调用接口页面的<script>部分增加如下配置。
    import wxpay from '@service.wxpay'
    var wxpay = require("@service.wxpay")

网页支付接入

  1. 参见“微信网页支付”,完成微信支付服务端的接入。
  2. 在服务端提供一个发起支付的H5页面,该页面取传入的mweb_url,然后自动跳转到mweb_url。
  3. 将上一步中支付H5页面对应的url填在manifest.json微信支付接口声明的url字段中。
    {"name": "service.wxpay", "params": {"package": "com.your.package", "sign": "abcdefg", "url": "https://your.domain/page"}}
  4. 导入模块:在调用接口页面的<script>部分增加如下配置。
    import wxpay from '@service.wxpay'
    var wxpay = require("@service.wxpay")

使用限制

展开

限制条件

说明

适用终端

手机、平板

适用区域

中国大陆

接口定义

展开

接口

定义

wxpay.getType(OBJECT)

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

wxpay.pay(OBJECT)

发起微信支付。

wxpay.payScoreEnable(OBJECT)

开通微信支付分(华为手机暂不支持)。

wxpay.getType(OBJECT)

描述

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

返回值

展开

返回值

说明

none

微信未安装。

APP

微信app调用方式,服务端向微信支付下单时,trade_type需要是APP,参见“微信app支付”。

MWEB

微信网页调用方式,服务端向微信支付下单时,trade_type需要是MWEB,参见“微信网页支付”。

wxpay.pay(OBJECT)

描述

发起微信支付。

OBJECT参数

展开

参数

类型

是否必填

说明

prepayid

string

微信支付服务器生成的预支付订单id,参见“微信app支付”和“微信网页支付”。

referer(1040+)

string

在微信支付后台配置的域名。从 1040 版本开始,在使用微信网页方式调用时,若该参数不为空,将通过设置referer的方式拉起微信客户端。

extra

object

当前支付方式下,需要填入的额外订单信息,具体参见“app方式extra参数说明”和“网页方式extra参数说明”。

success

function

成功后的回调函数:

  • App方式:回调发生在用户支付完成之后。
  • 网页方式:回调发生在订单提交给微信app之后。

fail

function

失败回调。

cancel

function

取消回调。

app方式extra参数说明:

展开

字段名

是否必选

说明

app_id

微信支付订单中的app_id。

partner_id

微信支付订单中的partner_id。

package_value

微信支付订单中的package_value。

nonce_str

微信支付订单中的nonce_str。

time_stamp

微信支付订单中的time_stamp。

order_sign

微信支付订单中的order_sign。

网页方式extra参数说明:

展开

字段名

是否必选

说明

mweb_url

在微信的支付服务器下单以后,微信返回的MWEB_URL,在开发者用于微信支付的h5页面中,直接将mweb_url取出后跳转过去即可,但这个做法并不是强制的,您也可以通过其他自定义键值向您自己的服务器换取MWEB_URL。

从 1040 版本开始,若使用设置referer的方式拉起微信客户端支付,则此参数必选。

custome_key

其他的自定义键值,开发者可以根据需要增加其他自己认为需要的键名和键值。

success返回值:

展开

参数名

类型

说明

prepayid

string

只在App支付方式下会出现,微信支付订单的prepayId。

final_url

string

只在网页方式下会出现,拼接参数之后,最终用于打开网页的url。

fail返回错误码:

展开

错误码

说明

900

在manifest.json中配置的应用签名有误,无法解析。

901

在manifest.json中配置的应用包名有误。

1000

微信未安装。

1001

用于微信网页支付的url配置找不到。

2001

订单已经提交给微信,但是微信返回错误, 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。

示例代码

useWxpay: function() {
    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(data) {
                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(data) {
                console.log("WX H5 PAY handling cancel");
            },
            success: function(data) {
                //H5方式下,支付成功的回调仅仅只是指将订单递交给微信,并不意味着支付已经成功完成
                console.log("WX H5 PAY handling success");
            }
        })
    } else {
        console.log("wx pay not available.");
    }
}

1040 版本开始,微信网页支付支持设置referer方式的示例代码:

<template>
    <div class="container">
        <div class="page-title-wrap">
            <text class="page-title">{{componentName}}</text>
        </div>
        <input class="btn" type="button" value="微信支付类型" onclick="payType" />
        <input class="btn" type="button" value="微信app支付" onclick="appPay"/>
         <input class="btn" type="button" value="微信web支付" onclick="webPay"/>
    </div>
</template>
<style>
    @import '../Common/css/common.css';
</style>
<script>
    import pay from '@service.wxpay'
    import prompt from '@system.prompt'
    import device from '@system.device'
    export default {
        data: {
            componentName: 'wxpay'
        },
        onInit: function () {
            this.$page.setTitleBar({ text: 'wxpay' })
            console.info('page init ing')
            console.info('platform  VersionCode ' + device.platform.versionCode)
            console.info('page  name ' + this.$page.name + " page component " + this.$page.component  + " page path " + this.$page.path)
        },
        payType: function () {
            var payType = pay.getType()
            console.info(' wxpay call function getType')
            prompt.showToast({
                message: 'pay type is ' + payType
            })
        },
       appPay: function () {
           console.info('wxpay call function appPay')
           pay.pay({
               prepayid: 'wx31144125075572856c06803c3317399963', // your order prepayid,eg: wx20170101abcdef1234567890
               extra: {
                   app_id: 'wxf2d0692792ceed2e', // your app_id
                   partner_id: '1217180501', // your partner_id
                   package_value: 'Sign=WXPay', // your package_value
                   nonce_str: '6f65bd777a1e4b5f9cab39223f8311ae', // your nonce_str
                   time_stamp: '1533019285', // your time_stamp
                   order_sign: 'AA7AFB31EAA6881ED23C1D71A38AE95D' // your order sign
               },
                 fail: function (data, code) {
                  console.log('WX PAY ' +  pay.getType() + 'failed, code = ' + code);
                  prompt.showToast({
                      message: 'WX PAY ' +  pay.getType() + ' failed, code = ' + code
                  })
              },
              cancel: function (data) {
                  console.log('WX PAY ' +  pay.getType() + ' cancelled by user');
                   prompt.showToast({
                      message: 'WX PAY ' +  pay.getType() + ' cancelled by user'
                  })
              },
              success: function (data) {
                  console.log('WX PAY ' +  pay.getType() + ' success');
                   prompt.showToast({
                      message: 'WX PAY ' +  pay.getType() + ' success'
                  })
              }
           })
        },
        webPay: function () {
          console.info('wxpay call function webPay')
          pay.pay({
              prepayid: 'wx09113246667953cfb8d067ad1892777375', // your order prepayid,eg: wx20170101abcdef1234567890
              referer: 'https://www.huawei.cn', //your host name configured in wechat
              extra: {
                  mweb_url: 'https%3A%2F%2Fwx.tenpay.com%2Fcgi-bin%2Fmmpayweb-bin%2Fcheckmweb%3Fprepay_id%3Dwx09113246667953cfb8d067ad1892777375%26package%3D299247950%26redirect_url%3Dhttps%3A%2F%2Fm.vip.com%2Fuser-order-detail-list-0.html',
                  prepayid: 'wx09113246667953cfb8d067ad1892777375'
              },
              fail: function (data, code) {
                  console.log('WX PAY ' +  pay.getType() + ' failed, code = ' + code);
                  prompt.showToast({
                      message: 'WX PAY ' +  pay.getType() + ' failed, code = ' + code
                  })
              },
              cancel: function (data) {
                  console.log('WX PAY ' +  pay.getType() + ' cancelled by user');
                   prompt.showToast({
                      message: 'WX PAY ' +  pay.getType() + ' cancelled by user'
                  })
              },
              success: function (data) {
                  console.log('WX PAY ' +  pay.getType() + ' success');
                   prompt.showToast({
                      message: 'WX PAY ' +  pay.getType() + ' success'
                  })
              }
          })
        }
    }
</script>

wxpay.payScoreEnable(OBJECT)(1072+)

描述

开通微信支付分。

说明

华为手机暂不支持该功能。

OBJECT参数

展开

参数

类型

是否必填

说明

success

function

成功回调。

fail

function

失败回调。

complete

function

执行结束后的回调。

fail返回错误码:

展开

错误码

说明

1002

不支持微信支付分。

示例代码

pay.payScoreEnable({
    success: function (data) {
        console.log('WX payScoreEnable success');
        prompt.showToast({
            message: 'WX payScoreEnable success'
        })
    },
    fail: function (data, code) {
        console.log('WX payScoreEnable failed, message = ' + data.content + ' code = ' + code);
        prompt.showToast({
            message: 'WX payScoreEnable failed, message = ' + data.content + ' code = ' + code
        })
    }
})

相关链接

在 API参考 中进行搜索
请输入您想要搜索的关键词