微信公众号支付详解

因为在弄微信公众号网页支付的时候,遇到比较多的坑,而且微信给出的文档也比较乱。自己在百度的时候也看到很多人遇到相同的问题,但是都没有得到满意的答案。
所以就自己写个日志记录一下,也算是自己的一个积累。
首先我这里将的微信公众号网页支付的方式也就是JS API 网页支付。是指用户打开图文消息戒者扫描二维码,在微信内置浏览器打开网页进行的支付。商户网页前端通过使用微信提供的 JS API,调用微信支付模块。这种方式,适合需要在商户网页进行选购下单的购买流程。
在进行微信公众支付之前,我们需要申请个公众好,以及申请微信支付的功能。这些不在之类讲述。
申请好了以后,我们需要获取一下信息。


然后我们再来看一下微信网页支付的流程图。 我们先从后端开始。 如下图:

从流程图可以看出,我们需要先拿到用户的openid,这个openid 是用户在这个公众号的唯一标识。需要拿到这个openid 是需要用户做授权的。
这个获取用户openid 的步骤 在微信官方文档讲述的还是比较详细的。 在这里就不详细讲述。详情看官方文档
在我们获取到用户的openid 的时候,此时我们就可以生成一个预支付的订单。在jsapi 生成预支付订单是需要用的openid的。所以一开始获取用户 的openid 也就是为了生存预支付订单做准备的。接下来我们来看,怎么生成预支付订单。
根据微信的官方文档,我们需要用微信统一支付接口生成预支付订单。
主要有以下几个步骤:
查看那些参数必须要上传的
对需要上传的参数进行加密,得到一个加密后的字符串,作为一个参数上传。
提交数据,并接受返回回来的结果。
需要上传的参数,因为参数还是比较多,详情看微信的官方文档(注意,参数是区分大小写的)
参数加密的步骤如下:
第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
java中可以用如下方法对参数进行ASCII字典序排序

String []  getPr =
{"appid","mch_id","nonce_str","body","out_trade_no","total_fee","spbill_create_ip","notify_url","trade_type","attach","openid"};
Arrays.sort(getPr);
for(String list :getPr ){
System.out.println(list);
}
stringA=”appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA”;

第二步:拼接API密钥:(拼接好后,进行MD5加密,然后把加密结果的小写字母转化为大写字母,从而得到加密字符串(sign))

stringSignTemp=”stringA&key=192006250b4c09247ec02edce69f6a2d”
sign=MD5(stringSignTemp).toUpperCase()=”9A0A8659F005D6984697E2CA0A9CF3B7”

最后一步,提交数据。注意这里提交数据的格式是以xml 的格式提交的。格式如下:

 <xml> <appid>wx2421b1c4370ec43b</appid>
 <attach>支付测试</attach>
 <body>JSAPI支付测试</body>
 <mch_id>10000100</mch_id> 
<nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str> 
<notify_url>http://wxpay.weixin.qq.com/pub_v2/pay/notify.v2.php</notify_url> 
<openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid> 
<out_trade_no>1415659990</out_trade_no> 
<spbill_create_ip>14.23.150.211</spbill_create_ip> 
<total_fee>1</total_fee> 
<trade_type>JSAPI</trade_type> 
<sign>0CB01533B8C1EF103065174F50BCA001</sign> 
</xml>

然后微信服务器返回的数据也是xml格式的。这个就自己找方法去解析这样的数据。 成功后则返回一下的参数:
返回的参数了则包含了 prepay_id 也就是支付流程里要我们获取的一个数据,其实这个就是预支付订单的订单编号,网页端就是拿这个订单编号去支付的。
但是前端要支付也还是要各种加密的。这个是比较恶心的。
现在我们来看前端应该怎么写。
要用微信 的接口,我们首先要做相应的权限配置。 详情看官方文档

wx.config({
debug:true,// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId:'',// 必填,公众号的唯一标识
timestamp: ,// 必填,生成签名的时间戳
nonceStr:'',// 必填,生成签名的随机串
signature:'',// 必填,签名,见附录1
jsApiList: []// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

这里生成signtrue 需要这个页面的全路径,不需要带参数。这个是需要注意的。
当配置成功后,就可以发起支付请求了。当使用了支付请求这个接口,是要到微信里去配安全域名的。不然则会失败。而且测试也是要发布的这个域名下进行测试。我之前就一直在本地测试,一直不成功,这是我最大的坑。设置安全域名如下图:



还要在微信支付里 设置 支付目录。


然后就就在前端调用微信支付请求。


wx.ready(function(res){
$.hideLoading();
WeixinJSBridge.invoke('getBrandWCPayRequest',{
"appId":"${prepay.appId}",//公众号名称,由商户传入
"timeStamp":"${prepay.timpstamp}",//时间戳,自 1970 年以来的秒数
"nonceStr":"${prepay.nonceStr}",//随机串
"package":"prepay_id=${prepay.prepayId}",
"signType":"${prepay.signType}",//微信签名方式:
"paySign":"${prepay.paySign}"//微信签名
},function(res){
console.info(res);
console.debug(res);
if(res.err_msg =="get_brand_wcpay_request:ok") {
}// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg 将在用户支付成功后返回 ok,但幵丌保证它绝对可靠。
});
});

paysign 这个签名生成的方式跟之前预支付订单sign 生成的方式是一样的 参数是区分大小写的。
官方文档
这样一个支付就可以了

如果在这方面遇到问题而解决不了的话。欢迎交流。 邮箱xuewenke123@qq.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容