由于本人愚钝,在最初接触微信支付时遇到很多坑。在第一次将微信支付调试成功之后在网上炫耀般的留了一个qq(24xxxx)号,以便帮助到更多的人。由此便接触到了大概100多号人的qq询问,期间也拒绝了很多人的好友请求。

届时不入把微信支付仔细整理下(本人的第一篇博文):

要了解微信得要有一个大概的脉络。你得知道微信公众号支付涉及2个东西  微信公众平台 和 微信商户平台(微信支付的账号)。

当时在开发微信支付时在网上有看到过很好的解释。这就有点像一个餐厅里面有收银台(微信支付)以及不同的餐桌(公众平台)。当我们需要涉及金钱交易时才和微信支付打交道。其余的操作都是和微信公众平台打交道(如:唤起微信的语音、卡券功能等)。

在理解了上述概念后,就得详细查阅微信支付文档里,我就不按照官方文档的步骤进行了。

第一步:要搞定就是【统一下单】在调用接口时我们内部系统已经生成了对应客户的订单号 以及内部财务系统的流水号以便对账。一般很多网友咨询都是调用这个微信返回 ”签名错误“,而且很多网友是和官方签名调试工具返回的结果是一样的也返回 签名错误。所以这里就很纳闷了一度陷入苦苦挣扎。

第一步需要注意的地方有以下几点:

1.发起请求的参数名要和文档一致,包括字母大小写

2.规定必须要传的参数一定要传,特别注意参数的定义与规则。例如:通知地址【notify_url】,官方规定:通知url必须为外网可访问的url,不能携带参数。有很多网友是直接拷贝的示例值或者localhost的url地址发起请求。由此一定要看清文档的规定

3.生成签名sign。

官方举例:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3

有好几个网友在进行到这一步时由于比较暴力,在看到官方示例中只有【appid  mch_id  device_info  body  nonce_str 】这几个参数后就强行忽视文档中规定的必须传递的参数只保留这几个参数进行接口访问 这也是比较粗心的问题造成;

当然还有需要注意的是在参与签名时需要附加一个key(支付密钥:是在微信支付平台里面进行设置的)进行md5加密以保证数据是安全,因为我当初开发的时候也在这里迷惑了很久。在开发微信商城时一开始记得的密钥是appsecret(这个紧跟的一般是appid),所以很多网友一直将这个appsecret作为key进行签名;

如若以上问题你都确定无误恭喜你,你还是有可能得到”签名错误“,一般这种时候整个人都不好了。没事我来给你举例子,到这个地步了朋友再坚持坚持 你就胜利。往往这个时候我们不能总是怪文档写的不过清晰明白,我们得体会了。你懂了吧。因为我们已经严格按照文档进行的每一步操作,所以我们有必要在进行一次上述问题的查漏。看是否有粗心造成的或者是复制粘贴的是在字符串中多留了一个空字符。如果你能1000%的确定上述提到过的地方我都检查过了。那么你只剩下最后一步了,检查你的MD5加密方法,在与网友交流的过程中他们最后发现 由内部同时提供的工具类Md5加密中居然悄悄的将utf-8格式给换了。修复这个bug你就成功了。

说道这里可算是解决了关键的一步:向微信下单【统一下单】

接下来就到了第二步:前台js唤起微信支付

官方文档地址为:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

模块为:微信网页开发->微信JS-SDK说明文档->发起一个微信支付请求

wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: '', // 支付签名
success: function (res) {
// 支付成功后的回调函数
}
});

备注:prepay_id 通过微信支付统一下单接口拿到,paySign 采用统一的微信支付 Sign 签名生成方法,注意这里 appId 也要参与签名,appId 与 config 中传入的 appId 一致,即最后参与签名的参数有appId, timeStamp, nonceStr, package, signType。

但是在微信支付平台的文档中也有一个示例:

模块为:公众号支付->微信内H5调起支付

示例代码如下:

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

这里很多人就有点懵了,我们先不管。分析其中的共同点,在js调起中涉及的appId, timeStamp, nonceStr, package, signType生成

在文档中没有明确的说明生成这个js调起支付的sign 是和 发起【统一下单】的生成规则是一样的。因为在开发微信时很多时候要使用到像获取用户相机、录音等功能。里面也涉及到sign。

我这里就不ao述这其中的曲折故事。只是要明白的就是这个sign 生成方法和【统一下单】生成规则一样。具体请看第一步中的注意事项

顺利到达这里,我相信你已经不会再犯参数字母错别字等等错误了

第二步需要注意的有以下几点:

1.其中"package":"prepay_id=u802345jgfjsdfgsdg888",     在这个字段的值要按照这种格式组装

2.生成签名时也是需要【支付密钥】进行信息加密处理的

接下来就到了html页面了。将刚刚生成的 appId, timeStamp, nonceStr, package, signType 以及 sign 通过接口的方式返回给前端进行script 组装

这里 一般会报调起支付失败,一般原因有以下几种可能(wx.chooseWXPay({})的调起方式):

a.js接口没有验证通过(这个就自己参考文档了https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115        按照文档一步一步就可以了)

b.js权限没有注册,将接口添加到权限列表中即可

c.支付目录没有设置正确 ,支付目录的设置目前已经搬迁到 微信商户平台进行设置了(最开始的时候是在公众平台进行设置)。设置支付目录需要注意设置的url必须要和你发起请求的url完全一致,例如:发起请求的url为:http://a.xxx.com/abc/def;但是设置的支付目录url为:http://a.xxx.com/Abc/Def;这其实是错误的设置方式。在设置支付目录时官方的提示是最好是能到具体的action(http://xxxx/controller/action)称为三级支付目录,在我开发中 只设置了 二级支付目录(http://xxxx/controller/),这样设置有一个好处就是,当你需要在这个controller下面涉及多个支付页面时不需要再新增支付目录了。当然我没有试过最暴力的设置只填写域名(http://xxx/),(在官网介绍中提及测试支付目录,我没有使用过也就不说了)。

到这里 基本就能调起微信支付了

其实这个过程忽略了很多其他例如:获取用户openid,以及微信的access_token的获取等,这些信息的获取的话严格按照文档进行是ok的。

微信公众号支付  总结:

其实遇到这么多错误,很多时候我们就是一味的吐槽和抱怨 官方文档的 不清晰明了。转而让自身陷入一个负面情绪中去,其实程序员也是需要 匠心独运 的一个艺术活。不过微信支付涉及的东西比较杂但是官方文档却没有一个比较清晰的说明。只是纯粹的说明api接口以及js调用的规则,而并没有一个比较概括性的东西 着眼于全局的思想进行考虑这个文档该如何布局和呈现。

微信支付整理 (微信公众号支付)相关推荐

  1. 微信支付一 :公众号支付1

    微信公众号支付H5调用支付详解 最近项目需要微信支付,然后看了下微信公众号支付,,虽然不难,但是细节还是需要注意的,用了大半天时间写了个demo,并且完整的测试了一下支付流程,下面分享一下微信公众号支 ...

  2. 微信支付开发教程(公众号支付)

    前段时间公司电商项目需要接入微信支付,因此研究了一下如何使用微信支付.和支付宝支付相比,微信支付相对复杂一些,需要配置的东西更多,限制也更多.经过两天的研究,终于搞定微信支付,在这里对于使用微信支付的 ...

  3. Java微信支付开发之公众号支付(微信内H5调起支付)

    官方文档 准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败) 借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公众号 ...

  4. 微信公众号,关联网页支付功能(公众号支付)的实现

    公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付.应用场景有: 1. 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付 ...

  5. 微信支付之JSAPI公众号支付

    本文首发于CSDN 原文链接:http://write.blog.csdn.net/mdeditor#!postId=51537271 前提 本教程默认以下几点你已经完全满足: 开通了认证后的服务号 ...

  6. 微信支付V3==>公众号支付、踩坑、简单记录

    开始! 接支付前,看了微信支付文档(有点乱),也看了一些文章,都是假V3,点进去看demo还是XML格式,坑,不过多描述. V3接起来整体还是有些坑的,不过坑不深,这里简单记录一下,避免忘了再踩! 首 ...

  7. 微信jsapi支付获取code_微信支付之JSAPI公众号支付详解

    前提 本教程默认以下几点你已经完全满足: 开通了认证后的服务号 服务号开通的微信支付的认证 腾讯给你的邮件中有商户登录的账号和密码 拥有一个可供上传代码和设置回调域名的网站或云服务 有一点点php知识 ...

  8. 公众号php支付接口开发,公众号支付接口的开发

    这次给大家带来公众号支付接口的开发,公众号支付接口开发的注意事项有哪些,下面就是实战案例,一起来看一下. 公众号支付就是在微信里面的H5页面唤起微信支付,不用扫码即可付款的功能.做这个功能首先要明确的 ...

  9. 微信支付JSAPI(公众号支付)接口调用

    来看微信支付jsapi接口是怎么调用的 步骤一:获取微信支付四大参数 首先要想支持微信支付,必须拥有两个账号 微信公众平台:账户 公众APPID,APPSECEPT ,微信商户平台商户ID, API密 ...

  10. 微信支付接口(公众号支付)+微信支付回调函数 附代码

    前段时间做微信支付,微信浏览器填写金额商品名之后提交跳转付款页面确认然后返回界面判断,今天来详细说下 国际惯例先贴代码 mcontroller.java public void wxpay() {if ...

最新文章

  1. AIの幕后人:探秘“硬核英雄”的超级武器
  2. 逼疯懒癌:“机器学习100天大作战”正式开始!
  3. R语言对数线性模型loglm函数_使用R语言进行混合线性模型(mixed linear model) 分析代码及详解...
  4. Jmeter之控制线程执行到某个结果时退出执行
  5. 洛谷P3902 递增
  6. 李宏毅 课程打包_按功能而不是按层打包课程
  7. 搜索引擎下拉食云速捷详细_下拉框优化才云速捷一流!下拉框优化虑云速捷豪杰...
  8. nginx rewrite php参数,Nginx rewrite伪静态配置参数详解
  9. linux安装文泉字体,Linux_Linux系统下的Emacs字体配置,安装步骤:   1、安装文泉 - phpStudy...
  10. powershell玩转ExcelCSV(一)
  11. 法律人学python_你要埋头苦学三个月,然后悄悄惊艳所有人。python速成大法满足你所有的要求!...
  12. python异常类父类_python【第五篇】异常处理
  13. 2022年iOS面试题简答题
  14. 1秒等于1000毫秒, 1毫秒等于1000微秒,1微秒等于1000纳秒
  15. 百位大整数的加法雏形——C语言
  16. 成功需要培养独特的眼光,芸赞通天下沈杨
  17. 内部类基本操作(基础)
  18. OSChina 周四乱弹 ——一周五天在诈尸
  19. shell脚本明文密码隐藏且加密
  20. 江西财经大学第二届程序设计竞赛同步赛----E-是不是复读机

热门文章

  1. 通过pdf的url在线浏览pdf
  2. html img 拉伸,图片因img标签拉伸的处理办法
  3. EV3文件打不开,闪退怎么办(完美解决,无弹窗,无警告)
  4. Flink 实时数仓伪分布虚拟机 (所有组件部署完成)
  5. 射频板PCB设计--微带线
  6. 抽奖功能java开发_基于Java实现抽奖系统
  7. 人工智能命题逻辑--测试题答案(三)
  8. 葫芦书笔记----循环神经网络(RNN)
  9. 构建自定义安全令牌服务
  10. 美股数据获取 python_几行Python代码,轻松获取美股阿里巴巴的交易数据