wx.requestPayment(Object object)

以 Promise 风格 调用:支持

微信小程序插件:不支持

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

功能描述

发起微信支付。调用前需在微信小程序微信公众平台-功能-微信支付入口申请接入微信支付。了解更多信息,可以参考 微信支付开发文档:

【普通商户】

  • 产品介绍
  • 开发指引
  • 下单接口
  • 调起支付接口

【普通服务商】

  • 产品介绍
  • 开发指引
  • 下单接口
  • 调起支付接口

【旧版本 (v2)】

  • 开发指引
  • 支付接口

如果使用云开发,则 wx.requestPayment 所需参数可以通过云开发微信支付统一下单接口免鉴权获取、并可免证书、免签名的安全调用微信支付服务端接口、及接收异步支付结果回调,详见云开发微信支付。

参数

Object object

属性 类型 默认值 必填 说明
timeStamp string 是 时间戳,从 1970 年 1 月 1 日 00:00:00 至今的秒数,即当前的时间
nonceStr string 是 随机字符串,长度为32个字符以下
package string 是 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=***
signType string MD5 否 签名算法,应与后台下单时的值一致
合法值 说明
MD5 仅在 v2 版本接口适用
HMAC-SHA256 仅在 v2 版本接口适用
RSA 仅在 v3 版本接口适用
paySign string 是 签名,具体见微信支付文档
success function 否 接口调用成功的回调函数
fail function 否 接口调用失败的回调函数
complete function 否 接口调用结束的回调函数(调用成功、失败都会执行)

示例代码

wx.requestPayment({
  timeStamp: '',
  nonceStr: '',
  package: '',
  signType: 'MD5',
  paySign: '',
  success (res) { },
  fail (res) { }
})

注:如果服务端有使用云开发,可以通过云开发微信支付统一下单接口免鉴权获取以上所需所有参数,示例:

// 云函数代码
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

exports.main = async (event, context) => {
  const res = await cloud.cloudPay.unifiedOrder({
    "body" : "小秋TIT店-超市",
    "outTradeNo" : "1217752501201407033233368018",
    "spbillCreateIp" : "127.0.0.1",
    "subMchId" : "1900009231",
    "totalFee" : 1,
    "envId": "test-f0b102",
    "functionName": "pay_cb"
  })
  return res
}

// 微信小程序代码
wx.cloud.callFunction({
  name: '函数名',
  data: {
    // ...
  },
  success: res => {
    const payment = res.result.payment
    wx.requestPayment({
      ...payment,
      success (res) {
        console.log('pay success', res)
      },
      fail (err) {
        console.error('pay fail', err)
      }
    })
  },
  fail: console.error,
})

wx.requestPluginPayment(Object object)

基础库 2.22.1 开始支持,低版本需做兼容处理。

以 Promise 风格 调用:不支持

微信小程序插件:支持,需要微信小程序基础库版本不低于 2.22.1

微信 鸿蒙 OS 版:支持

相关文档: 插件支付功能页

功能描述

在微信小程序插件中发起支付。

参数

Object object

属性 类型 默认值 必填 说明
version string 是 插件版本
合法值 说明
develop 开发版
trial 体验版
release 正式版
fee number 是 需要显示在页面中的金额,单位为分
paymentArgs Object 是 任意数据,传递给功能页中的响应函数
currencyType string CNY 否 需要显示在页面中的货币符号的代码
success function 否 接口调用成功的回调函数
fail function 否 接口调用失败的回调函数
complete function 否 接口调用结束的回调函数(调用成功、失败都会执行)

Tip

  1. tip: 微信小程序与插件绑定在同一个开放平台账号上,且微信小程序与插件均为该开放平台账号的同主体或关联主体时,调用此接口将直接拉起支付收银台。
  2. tip: 这个接口本身可以在开发者工具中使用,但功能页的跳转目前不支持在开发者工具中调试,请在真机上测试。
  3. tip: 跳转支付功能页需要在 app.json 中配置 "functionalPages": true

示例代码

具体用法及参数说明可参考 插件支付文档

wx.requestPluginPayment({
  version: 'release',
  fee: 1,
  paymentArgs: {},
  currencyType: 'CNY',
  success (res) { },
  fail (res) { }
})

wx.requestVirtualPayment(Object object)

基础库 2.19.2 开始支持,低版本需做兼容处理。

以 Promise 风格 调用:不支持

微信小程序插件:不支持

功能描述

发起米大师虚拟支付

参数

Object object

属性 类型 默认值 必填 说明
signData Object 是 具体支付参数见signData, 该参数需以string形式传递, 例如signData: ‘{“offerId”:”123″,”buyQuantity”:1,”env”:0,”currencyType”:”CNY”,”productId”:”testproductId”,”goodsPrice”:10,”outTradeNo”:”xxxxxx”,”attach”:”testdata”}’
结构属性 类型 默认值 必填 说明
offerId string 是 微信小程序支付基础配置中的offerid
buyQuantity number 是 购买数量
env number 否 环境配置, 0 正式环境, 1 沙箱环境, 默认为 0
currencyType string 是 币种
合法值 说明
CNY 人民币
productId string 否 道具ID, **该字段仅mode=short_series_goods时需要必填**
goodsPrice number 否 道具单价(分), **该字段仅mode=short_series_goods时需要必填**, 用来校验价格与后台道具价格是否一致, 避免用户在业务商城页看到的价格与实际价格不一致导致投诉
activitySellingPrice number 否 道具优惠价格(分),**非必填,该字段需与goodsPrice一起传入**。如用户使用优惠券、积分等,需要以低于道具价格下单时可传入,传入后该价格即为实际下单价格。
outTradeNo string 是 业务订单号, 每个订单号只能使用一次, 重复使用会失败(极端情况不保证唯一, 不建议业务强依赖唯一性). 要求8-32个字符内, 只能是数字、大小写字母、符号 _-|*@组成, 不能以下划线(_)开头
attach string 是 透传数据, 发货通知时会透传给开发者
mode string 是 支付的类型, 不同的支付类型有各自额外要传的附加参数
合法值 说明
short_series_goods 道具直购
short_series_coin 代币充值
paySig string 是 支付签名, 详见《签名详解》
signature string 是 用户态签名, 详见《签名详解》
success function 否 接口调用成功的回调函数
fail function 否 接口调用失败的回调函数
complete function 否 接口调用结束的回调函数(调用成功、失败都会执行)

object.success 回调函数

参数
Object res
属性 类型 说明
errMsg string 调用成功信息

object.fail 回调函数

参数
Object err
属性 类型 说明
errMsg string 错误信息
errCode number 错误码

错误

错误码 错误信息 说明
1001 参数错误
-1 支付失败
-2 支付取消
-4 风控拦截
-5 开通签约结果未知
-15001 参数错误,具体原因见err_msg
-15002 outTradeNo重复使用,请换新单号重试
-15003 系统错误
-15004 currencyType错误,目前只能填CNY
-15005 用户态签名signature错误
-15006 支付签名paySig错误
-15007 session_key过期
-15008 二级商户进件未完成
-15009 代币未发布
-15010 道具productId未发布
-15011 现网版本的env只能是0,不能填1(沙盒环境)
-15012 调用米大师失败导致关单,请换新单号重试
-15013 goodsPrice道具价格错误
-15014 道具/代币发布未生效,禁止下单,大概10分钟后生效
-15016 signData格式有问题
-15017 此商家涉嫌违规,收款功能已被限制,暂时无法支付。商家可以登录微信商户平台或微信支付商家助手微信小程序查看原因和解决方案
-15018 代币或道具的productId审核未通过
-15019 调用微信时提示商户受限,商家可以登录微信商户平台或微信支付商家助手微信小程序查看原因和解决方案
-15020 操作过于频繁,请稍后再试
-15021 微信小程序交易被限制频率

注意事项:

  • 目前只有基础库版本大于或等于 v2.19.2 时才支持该接口,后续会逐步支持更多低版本基础库。因此建议开发者这样判断:当前用户的基础库版本大于或等于 v2.19.2 时,可以直接使用 wx.requestVirtualPayment;小于 v2.19.2 时,使用 wx.canIUse(‘requestVirtualPayment’) 来判断接口是否可用。具体判断方法可参考示例代码。

示例代码

function compareVersion(_v1, _v2) {
  if (typeof _v1 !== 'string' || typeof _v2 !== 'string') return 0

  const v1 = _v1.split('.')
  const v2 = _v2.split('.')
  const len = Math.max(v1.length, v2.length)

  while (v1.length < len) {
    v1.push('0')
  }
  while (v2.length < len) {
    v2.push('0')
  }

  for (let i = 0; i < len; i++) {
    const num1 = parseInt(v1[i], 10)
    const num2 = parseInt(v2[i], 10)

    if (num1 > num2) {
      return 1
    } else if (num1 < num2) {
      return -1
    }
  }

  return 0
}

const SDKVersion = wx.getSystemInfoSync().SDKVersion

if (compareVersion(SDKVersion, '2.19.2') >= 0 || wx.canIUse('requestVirtualPayment')) {
  wx.requestVirtualPayment({
    signData: JSON.stringify({
      offerId: '123',
      buyQuantity: 1,
      env: 0,
      currencyType: 'CNY',
      productId: 'testproductId',
      goodsPrice: 10,
      outTradeNo: 'xxxxxx',
      attach: 'testdata',
    }),
    paySig: 'd0b8bbccbe109b11549bcfd6602b08711f46600965253a949cd6a2b895152f9d',
    signature: 'd0b8bbccbe109b11549bcfd6602b08711f46600965253a949cd6a2b895152f9d',
    mode: 'short_series_goods',
    success(res) {
      console.log('requestVirtualPayment success', res)
    },
    fail({ errMsg, errCode }) {
      console.error(errMsg, errCode)
    },
  })
} else {
  console.log('当前用户的客户端版本不支持 wx.requestVirtualPayment')
}

wx.verifyHKPaymentPassword(Object object)

基础库 3.17.4 开始支持,低版本需做兼容处理。

以 Promise 风格 调用:不支持

微信小程序插件:不支持

微信 鸿蒙 OS 版:支持

功能描述

拉起WeChat Pay HK密码验证组件。

接入步骤:

  1. 商户需已经开通微信港币钱包WeChat Pay HK的支付权限,
  2. 请用商户在微信支付入驻时预留的邮箱,发起邮件申请接入权限:
  • 【收件人】hkpayment@wechat.com
  • 【邮件主题】申请接入验证WeChat Pay HK密码验证+商户名称:***+商户号:***
  • 【邮件内容】因XXX原因(原因请按实际情况填写,不合理的原因将被驳回),需申请拉起WeChat Pay HK密码验证组件,申请材料如下:
    • 商户名称
    • 商户号
    • 申请调用的微信小程序名称
    • 申请调用的微信小程序APPID
    • 商户资质材料扫描件或照片(CI,BR任一),所有材料均需清晰,且有盖章
    • 拉起WeChat Pay HK密码验证的场景说明:需有文字和示意图说明
    • 商户联系方式:邮件***,联系电话***