求抓包获得的微信sdk支付参数集成在浏览器链接让用户打开的方式,需要ios安卓双端都能用此链接唤起微信支付
高价跪求方案,价格好说,五位数起
你这个如果想安卓和ios都支持的话。需要一个微信H5页面过渡一下,然后把地址栏参数携带过去。
在微信浏览器里面打开H5网页中执行JS调起支付。接口输入数据格式为JSON。
注意:WeixinJSBridge内置对象在其他浏览器中无效。
getBrandWCPayRequest参数以及返回值定义:
1、网页端接口请求参数列表(参数需要重新进行签名计算,参与签名的参数为:appId、timeStamp、nonceStr、package、signType,参数区分大小写。)
2、返回结果值说明
注:JS API的返回结果get_brand_wcpay_request:ok仅在用户成功完成支付时返回。由于前端交互复杂,get_brand_wcpay_request:cancel或者get_brand_wcpay_request:fail可以统一处理为用户遇到错误或者主动放弃,不必细化区分
getWechatPay:function(){
// 获取微信支付sdk的参数
this.$http.get('/tgglApi/wechatPay/pay?orderId=' + window.localStorage.orderId).then(function(rs){
console.log(rs);
if(rs.body.status == '200'){
app.retrieve(rs.body.data);
}else{
// app.isBuyModal = true; // 去支付modal
console.log('服务器数据异常!');
}
});
},retrieve:function(param) {
//微信调起支付页面
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', function () {
app.onBridgeReady(param);
}, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', function () {
app.onBridgeReady(param);
});
document.attachEvent('onWeixinJSBridgeReady', function () {
app.onBridgeReady(param);
});
}
} else {
app.onBridgeReady(param);
}
},
onBridgeReady:function(param){
WeixinJSBridge.invoke('getBrandWCPayRequest',param,function(res){
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。
if(res.err_msg == "get_brand_wcpay_request:ok" ){
window.location.href = 'ptpaySuccess.html';
}else{
app.isBuyModal = true;
console.log('pay_error');
}
});
}
商户侧
要求商户已有H5商城网站,并且已经过ICP备案。通过微信H5支付可以实现在非微信浏览器(如QQ浏览器、谷歌浏览器、Safari等)中使用微信支付的场景。
用户侧
步骤(1):用户从非微信浏览器的站点导航进入商户H5网页,用户挑选需购买商品,选择微信支付发起购买流程。
微信客户端
步骤(2):进入微信客户端确认交易,输入支付密码。
进入微信客户端确认交易,调起微信支付控件,输入支付密码 进入微信客户端确认交易,调起微信支付控件,输入支付密码
步骤(3):支付成功,用户收到支付凭证,同时商户后台收到支付成功的通知。
密码验证通过,支付成功。商户后台得到支付成功的通知 密码验证通过,支付成功。商户后台得到支付成功的通知
接口流程图
1、用户在商户侧完成下单,使用微信支付进行支付
2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB
3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页
4、中间页进行H5权限的校验,安全性检查(此处常见错误请见下文)
5、如支付成功,商户后台会接收到微信侧的异步通知
6、用户在微信支付收银台完成支付或取消支付,返回商户页面(默认为返回支付发起页面)
7、商户在展示页面,引导用户主动发起支付结果的查询
8,9、商户后台判断是否接到收微信侧的支付结果通知,如没有,后台调用我们的订单查询接口确认订单状态
10、展示最终的订单支付结果给用户
常见问题
一、回调页面
正常流程用户支付完成后会返回至发起支付的页面,如需返回至指定页面,则可以在MWEB_URL后拼接上redirect_url参数,来指定回调页面。
如,您希望用户支付完成后跳转至https://www.wechatpay.com.cn,则可以做如下处理:
注意:
1.需对redirect_url进行urlencode处理
2.由于设置redirect_url后,回跳指定页面的操作可能发生在:1,微信支付中间页调起微信收银台后超过5秒 2,用户点击“取消支付“或支付完成后点“完成”按钮。因此无法保证页面回跳时,支付流程已结束,所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。回跳页面展示效果可参考下图
二、其它常见错误
序号 问题 错误描述 解决方法
1 268498465 网络环境未能通过安全验证,请稍后再试 这是因为商户侧统一下单传的终端IP(spbill_create_ip)与用户实际调起支付时微信侧检测到的终端IP不一致导致的,这个问题一般是商户在统一下单时没有传递正确的终端IP到spbill_create_ip导致,详细可参见客户端ip获取指引;还有可能是统一下单与调起支付时的网络有变动,如统一下单时是WIFI网络,下单成功后切换成4G网络再调起支付,这样会引发我们的正常拦截,请保持网络环境一致的情况下发起支付流程
2 268443815 商家参数格式有误,请联系商家解决 这是因为当前调起H5支付的referer为空导致,一般是因为直接访问页面调起H5支付,请按正常流程进行页面跳转后发起支付,或自行抓包确认referer值是否为空;如果是APP里调起H5支付,需要在webview中手动设置referer,如(
Map extraHeaders = new HashMap();
extraHeaders.put("Referer", "商户申请H5时提交的授权域名");//例如
2,如果设置了回跳地址redirect_url,请确认设置的回跳地址的域名与申请H5支付时提交的授权域名是否一致
4 268498468 支付请求已失效,请重新发起支付 统一下单返回的MWEB_URL生成后,有效期为5分钟,如超时请重新生成MWEB_URL后再发起支付
6 请在微信外打开订单,进行支付 H5支付不能直接在微信客户端内调起,请在外部浏览器调起
1.首先我们先看下,微信的SDK或者支付宝的sdk怎么唤起对应的支付的。
目前微信和支付宝唤起都是通过scheme的方式(或者app links)唤起app。以android为例
以唤起微信小程序为例weixin://+ appid +/jumpWxa/?userName= 小程序原始id &path= +小程序页面+"+"orderId="+orderId+"&sign="+sign
以唤起支付宝小程序为例alipays://platformapi/startapp?appId=+appid+&page=+小程序页面+&query= 参数(k=v&k=v&k=v ,需要Encode转码)
2.scheme其实也是一种类似于https的协议,其中最前面的开头,协议的完整内容,都要按照被接收app来实现。
3.实现统一支付的两种实现方式
(1) app通过scheme唤起小程序,并且传递参数过去,小程序调起支付
(2)app打开中间网页,中间网页通过scheme方式直接打开微信支付进行支付
实际上你抓包获取到的参数,就是一个scheme的形式。你让网页判断浏览器类型,调用不同平台的scheme形式,就和打开网页一样的方式打开就行。
望采纳,不懂得可以追加提问
坐等采纳,哈哈哈哈
你这个如果想安卓和ios都支持的话。需要一个微信H5页面过渡一下,然后把地址栏参数携带过去。
在微信浏览器里面打开H5网页中执行JS调起支付。接口输入数据格式为JSON。
注意:WeixinJSBridge内置对象在其他浏览器中无效。
getBrandWCPayRequest参数以及返回值定义:
1、网页端接口请求参数列表(参数需要重新进行签名计算,参与签名的参数为:appId、timeStamp、nonceStr、package、signType,参数区分大小写。)
img
2、返回结果值说明
img
注:JS API的返回结果get_brand_wcpay_request:ok仅在用户成功完成支付时返回。由于前端交互复杂,get_brand_wcpay_request:cancel或者get_brand_wcpay_request:fail可以统一处理为用户遇到错误或者主动放弃,不必细化区分
getWechatPay:function(){
// 获取微信支付sdk的参数
this.$http.get('/tgglApi/wechatPay/pay?orderId=' + window.localStorage.orderId).then(function(rs){
console.log(rs);
if(rs.body.status == '200'){
app.retrieve(rs.body.data);
}else{
// app.isBuyModal = true; // 去支付modal
console.log('服务器数据异常!');
}
});
},retrieve:function(param) {
//微信调起支付页面
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', function () {
app.onBridgeReady(param);
}, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', function () {
app.onBridgeReady(param);
});
document.attachEvent('onWeixinJSBridgeReady', function () {
app.onBridgeReady(param);
});
}
} else {
app.onBridgeReady(param);
}
},
onBridgeReady:function(param){
WeixinJSBridge.invoke('getBrandWCPayRequest',param,function(res){
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。
if(res.err_msg == "get_brand_wcpay_request:ok" ){
window.location.href = 'ptpaySuccess.html';
}else{
app.isBuyModal = true;
console.log('pay_error');
}
});
}
大手笔啊,坐等采纳啊