1.4.1 支付场景
商户已有H5 商城网站,在微信内打开网页时,可以调用微信支付完成下单购买的流程。
步骤(1):左图,商户下发图文消息或者通过自定义菜单吸引用户点击进入商户网页。
步骤(2):右图,进入家网页,用户选择购买,完成选购流程。


步骤(3):左图,调起微信支付控件,用户开始输入支付密码。
步骤(4):右图,密码验证通过,支付成功。商户后台得到支付成功的通知。


步骤(5):左图,返回商户页面,显示购买成功。该页面由商户自定义。
步骤(6):右图,公众号下发消息,提示发货成功。该步骤可选。


注意:商户也可以把商品网页的链接生成二维码,用户扫一扫打开后即可完成购买支付。
1.4.2 交互细节
以下是支付场景的交互细节,请认真阅读,并设计商户页面的逻辑:
(1 ) 用户打开商户网页选购商品, 发起支付, 在网页通过JavaScript 调用getBrandWCPayRequest 接口,发起微信支付请求,用户进入支付流程。
(2)用户成功支付点击完成按钮后,商户的前端会收到JavaScript 的返回值。商户可直接跳转到支付成功的静态页面进行展示。
(3)商户后台调用扫码支付查询接口,获取到支付状态,标志该笔订单支付成功。
注:(2)和(3)的触发不保证遵循严格的时序。JS API 返回值作为触发商户网页跳转的标志,但商户后台应该只在调用扫码支付查询接口,获取到支付状态后,才做真正的支付成功的处理。
JSAPI 返回值目前只在支付成功时返回,后续版本将扩展返回值,以便商户做更多个性化的展示。
1.4.3 获取微信当前版本
由于微信5.0 版本后才加入微信支付模块,低版本用户调用微信支付功能将无效。因此,建议商户通过user agent 来确定用户当前的版本号后再调用支付接口。以iPhone 版本为例,可以通过user agent 可获取如下微信版本示例信息:
“Mozilla/5.0(iphone;CPU iphone OS 5_1_1 like Mac OS X) AppleWebKit/534.46(KHTML,likeGeocko) Mobile/9B206 MicroMessenger/5.0”
其中5.0 为用户安装的微信版本号,商户可以判定版本号是否高于或者等于5.0。
示例代码:
var wechatInfo = navigator.userAgent.match(/MicroMessenger\/([\d\.]+)/i) ;
if( !wechatInfo ) {
alert(“微信支付仅可在微信内发起”);
} else if ( wechatInfo[1] <“5.0”) {
alert(“您的微信版本小于5.0,请升级版本后再次尝试”);
}else{//TODO}
1.4.4 显示微信安全支付标题
对于商户具有支付权限且需要调用微信支付的页面,为了让用户增加购买信心,确认交易环境安全,微信强烈建议商户使用“微信安全支付”标题。安全支付标题的如下图。

显示支付安全标题,需将原始链接添加上”showwxpaytitle=1″的尾串。通过这种方式,商户的页面将出现微信安全支付的标识。例如,原始URL 为:htp://weixin.qq.com,显示安全支付标题的URL 为:htp://weixin.qq.com?showwxpaytitle=1。
当用户在微信里打开https://weixin.qq.com 不会直接出现微信安全支付的标题,而打开htp://weixin.qq.com?showwxpaytitle=1 后将出现微信安全支付标题。
1.4.5 JSAPI支付代码实现
接口需要注意:所有传入参数都是字符串类型!使用JavaScript、PHP 等弱类型语言需要关注一下,且使用浦发通道JSAPI支付时,无需以下代码,可将接口返回的 packjspayurl 参数值直接在页面打开。
WeixinJSBridge.invoke(‘getBrandWCPayRequest’,{
“appId”: appid,//微信公众号,扫码支付接口返回
“timeStamp”:timestamp, //时间戳,扫码支付接口返回
“nonceStr”: noncestr, //随机串,扫码支付接口返回
“package”: “prepay_id=”+prepayid,//预下单ID,扫码支付接口返回
“signType”: signType, //签名方式,扫码支付接口返回
“paySign”: paySign, //支付签名,扫码支付接口返回
},function(res){
if(res.err_msg == “get_brand_wcpay_request:ok”) {
//支付成功,可做页面上的跳转,订单状态要后台去轮询调用1.5扫码支付查询接口获得
}else if(res.err_msg == “get_brand_wcpay_request:cancel”){
//用户取消支付;
} else if(res.err_msg == “get_brand_wcpay_request:fail”){
//用户支付失败;
}}});