商户H5跳转微信侧小程序-确认订单
简介
接口名称: openBusinessView
接口兼容:
接口参数
Object
字段名 | 必填 | 类型 | 示例值 | 说明 |
---|---|---|---|---|
businessType | 是 | String | wxpayScoreUse | 固定配置:wxpayScoreUse |
queryString | 是 | String | 见queryString示例 | 使用URL的query string方式传递参数,格式为key=value& key2=value2,其中value、value2需要进行UrlEncode处理 |
envVersion | 否 | String | release | 要打开的小程序版本。仅在当前小程序为开发版或体验版时此参数有效。如果当前小程序是正式版,则打开的小程序必定是正式版 |
query示例:
mch_id=1230000109&package=XXXXXXXX&
timestamp=1530097563&nonce_str=zyx53Nkey8o4bHpxTQvd8m7e92nG5mG2
&sign_type=HMAC-SHA256&sign=029B52F67573D7E3BE74904BF9AEA
query内部参数:
字段名 | 必填 | 类型 | 示例值 | 说明 |
---|---|---|---|---|
mch_id | 是 | String | 1230000109 | 微信支付分配的商户号 |
package | 是 | String | XXXXXXXX | 可在【创建订单】接口的返回字段package中获取 |
timestamp | 是 | String | 1530097563 | 生成签名时间戳,单位秒 |
nonce_str | 是 | String | zyx53Nkey8o4bHpxTQvd8m7e92nG5mG2 | 生成签名随机串。由数字、大小写字母组成,长度不超过32位 |
sign_type | 是 | String | HMAC-SHA256 | 签名类型。仅支持HMAC-SHA256 |
sign | 是 | String | 029B52F67573D7E3BE74904BF9AEA | 使用字段mch_id、package、timestamp、nonce_str、sign_type按照签名生成算法计算得出的签名值 |
object.envVersion 的合法值
示例值 | 说明 |
---|---|
release | 正式版 |
返回参数
Object res
字段名 | 必填 | 类型 | 示例值 | 说明 |
---|---|---|---|---|
err_code | 是 | Number/String | iOS:0 Android:'0' |
返回码。这里由于iOS和Android实现的差异,err_code类型可能为Number或String,所以在判断微信侧小程序是否成功返回商户的H5时,需要对err_code做整型化处理 |
err_msg | 是 | String | openBusinessView:ok | 返回信息 |
+extraData | 否 | Object | 当err_code为0时,extraData才返回;反之,则不返回 |
注意:只有用户点击微信侧小程序页面内返回按钮时,才会带上返回参数;如果用户点击页面左上角的返回图标按钮,则不会带上返回参数。
示例代码:
let wechatInfo = navigator.userAgent.match(/MicroMessenger\/([\d\.]+)/i);
let wechatVersion = wechatInfo[1];
if (compareVersion(wechatVersion, '7.0.5') >= 0) {
goToWXScore();
} else {
// 提示用户升级微信客户端版本
window.href = 'https://support.weixin.qq.com/cgi-bin/readtemplate?t=page/common_page__upgrade&
text=text005&btn_text=btn_text_0'
}
/**
* 跳转微信支付分
*/
function goToWXScore() {
wx.checkJsApi({
jsApiList: ['openBusinessView'], // 需要检测的JS接口列表
success: function (res) {
// 以键值对的形式返回,可用的api值true,不可用为false
// 如:{"checkResult":{"openBusinessView":true},"errMsg":"checkJsApi:ok"}
if (res.checkResult.openBusinessView) {
wx.invoke(
'openBusinessView', {
businessType: 'wxpayScoreUse',
queryString: 'mch_id=1230000109&package=xxxxx&
timestamp=1530097563&nonce_str=zyx53Nkey8o4bHpxTQvd8m7e92nG5mG2&sign_type=HMAC-SHA256&
sign=029B52F67573D7E3BE74904BF9AEA'
},
function (res) {
// 从微信侧小程序返回时会执行这个回调函数
if (parseint(res.err_code) === 0) {
// 返回成功
} else {
// 返回失败
}
});
}
}
});
}
/**
* 版本号比较
* @param {String} v1
* @param {String} v2
*/
function compareVersion(v1, v2) {
v1 = v1.split('.')
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])
const num2 = parseint(v2[i])
if (num1 > num2) {
return 1
} else if (num1 < num2) {
return -1
}
}
return 0
}