手机浏览器上微信支付
手机上支付宝
支付宝能够在手机浏览器(非微信内置浏览器)上直接跳转到支付宝App,但发现微信无法实现、
支付宝的链接是这样的
1 | #类似这样 |
但是研究京东,发现是微信能够实现的。用二维码解码器分析其二维码,发现其链接类似于
1 | weixin://wxpay/bizpayurl?sign=6425491f60bebd7893675fbf4f57545ec257e807&appid=wxbb46510af80cea38 |
网上资料
网上找了很多资料,很多人都说无法实现。
微信支付的JSAPI支付方式可以从网页上发起支付,但是仅限于在微信内置浏览器中使用
是微信提供了一种直接从H5页面调起微信支付的模式https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1,接口参数做一点修改就可以了,只是开通这个支付权限比较麻烦,微信技术客服的回答是“需要有商务BD才可以开通”,貌似目前除了京东使用了这种支付方式外,其它用网页支付的都是微信JSAPI方式。
查看了京东网页端的源码后发现,京东最终在调微信支付的靠的就是这个URL:
weixin://wap/pay?appid=wx799c7916b43b4282&noncestr=6rs6muegbzaodwao7sl76uomxx9s5vs6 &package=WAP&prepayid=wx20150922101123d1aea3ba1a0005507672×tamp=1442888195 &sign=3B59AB4A84BDD3177CB55BB61D6C6408,
参数是京东后台返回的。但是这个URL只能在京东的域名下点击才能调起微信支付控件,放在我的域名下貌似调起来了,但直接提示“系统繁忙,请稍后再试!”,估计是微信做了域名限制。我又把京东的微信账号换成自己的,重新生成预付单和签名信息,放在自己的域名下,还是提示“系统繁忙,请稍后再试!”,看起来确实像微信特地给京东开了这个后门,只能京东可以用,其他人用不了。从APP发起的话会容易的多,从网页上发起就比较麻烦了,需要依赖微信的控件WeixinJSBridge,但是这个控件只在微信内置浏览器里才有,外部浏览器里没有,所以也就不能在外部浏览器发起微信支付
查看微信官方文档
发现最新文档是可以H5支付(非微信内浏览器支付),需要手机微信6.0.2
以下来着微信官方文档:https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_3
场景:用户从非微信浏览器的站点导航,进入商户H5网页,用户挑选需购买商品,选择支付方式为微信支付,发起购买流程。
原理:使用deeplink链接
deeplink定义
商户server调用统一下单接口请求订单,api参见公共api【统一下单】(接口中trade_type需定义为WAP),微信会返回给商户prepayid,商户按固定格式生成deeplink,通过用户点击deeplink来调起微信支付。
deeplink格式:
1 | weixin://wap/pay?appid%3Dwxf5b5e87a6a0fde94%26noncestr%3D123%26package%3D123%26 |
生成deeplink
的步骤如下:
1:按URL 格式组装参数, $value 部分进行URL 编码,生成string1:string1 : key1=Urlencode($value1)&key2=Urlencode($value2、&...
2:对string1 作整体的Urlencode,生成string2:String2=Urlencode(string1);
3:拼接前缀,生成最终deeplink
举例如下:
String1:
1 | appid=wxf5b5e87a6a0fde94&noncestr=123&package=WAP&prepayid=wx20141210163048 |
appid%3Dwxf5b5e87a6a0fde94%26noncestr%3D123%26package%3DWAP%26prepayid%3Dw
x201412101630480281750c890475924233%26sign%3D53D411FB74FE0B0C79CC94F2AB0E2
333%26timestamp%3D1417511263
1 |
|
weixin://wap/pay?appid%3Dwxf5b5e87a6a0fde94%26noncestr%3D123%26package%3DW
AP%26prepayid%3Dwx201412101630480281750c890475924233%26sign%3D53D411FB74FE0
B0C79CC94F2AB0E2333%26timestamp%3D1417511263
```