微信支付填坑日志

我之前对移动端 服务器 微信 通信 公众号 sdk api 一点都不了解
我了解的是java端的网页开始开发工作
不过 我们老板给了我一个新的需求 说是要让我做一个微信公众号的商户平台支付
我是一脸懵逼的 不过没有办法 生活所迫 只能强硬着上了 再次做个日志填坑

时间2019.08.10-2019.09-16
不想看我唠叨的朋友 可以跳过中间的 源代码在最后

1 第一步

没什么好说的 官方文档走起

https://pay.weixin.qq.com/
当时我们老板就给了我一个网址 给了一个需求 做微信支付 剩下的全是我自己去摸索的
所以才有了这个填坑的日志

一开始我的方向没有作对 我以为是要做一个商城的扫码支付 关于商城的代码 已经有前同事写好了 拿来就用(拿来主义)

我做的方向自然是NATIVE支付模式 附上一张native 模式的图
在这里插入图片描述
程序员看这张图就可以 了 (我一开始是没有看懂的 )

接着就是模式一的开发文档的了解
模式二
api
第一次看的时候 我每一个页面都看过去了

然后就是把 java的sdk 下载下来了
前面说过 我其实不太懂api 和sdk 这就是我遇到的第一个坑
开始填坑

我一开始以为把他的sdk下载下来之后就可以在他的sdk上开发了 然后我就在他的sdk上尝试了许久 没有找到路途
没什么办法 某度了 许久
才知道 只需要在maven 里面 引入依赖就可以使用别人的sdk了 这个是微信支付的依赖

com.github.tedzhdz
wxpay-sdk
3.0.9

接着是api的使用 又蒙了 某度 没有结果 或者说结果不理想

没什么好说的 源代码走起 这个我看懂了 但是跟api关系不大
因为我不太会封装 虽然他给了我一个接口地址 但是我不会用 emmm
后来
偶然的一个机会 我想 应该有人会封装 那就是某度 果然 某度到了
我下了 一个weixin-popular的sdk

https://mvnrepository.com/artifact/com.github.liyiorg/weixin-popular
      微信sdk weixin-popular的sdk
        <dependency>
            <groupId>com.github.liyiorg</groupId>
            <artifactId>weixin-popular</artifactId>
            <version>2.8.28</version>
        </dependency>

它基本将所有的微信api 接口都封装好了 (后来我才发现 微信也封装好了)
把它的代码copy下来
本地执行
看错误和异常
然后我又遇到了一个难题 我不会获取oppid 我以为oppid是必要的
我还记的 我看了许久的错误 这个错误是 缺少oppid
重新又看了遍文档 和某度 某歌
发现native 的模式二不需要 oppid 哈哈哈哈哈哈汪汪大笑 真是天无绝人之路

然后得到一个在这里插入图片描述
开心……
又遇到了一个难题 我不会生成二维码 是的你没有听错 我不会

重新了又看了一遍文档 毫无作用
然后我的想法是 我用weixin-popular 中的qrcodeApi不就好了

然后发现我不会获取token(这是什么?) 不会获取授权 生成的东西怎么展示给前端 给用户 也是坑
这里不得不说 某信 真的是坑

我 去了某个某个博客网 发现了一个网址
代码狗的在线生成二维码网址
https://www.daimadog.com/qrcode

输入你想要的参数和大小 得到你想要的二维码 (在后来 我已经知道了如何生成二维码 可是已经懒的改了)
在这里插入图片描述那接下去我都会
ajax 从前端发送参数
在后台得到 codeurl
然后在线生成二维码
打开微信
扫一扫
一分钱没有了
等等 一分钱没有了

这个时候 我才反应过来 我没有用测试环境 啊啊啊啊啊啊啊啊啊啊啊啊啊
我的一分钱 QAQ

而且当时的我 不会切换环境 思考了许久 一分钱而已 给他吧
难受香菇

到了这一步 我觉得我已经大工告成了
不要你觉得 要我觉得

然后又遇到了一个问题 微信通知?
这是什么 ? 我反应过来了 我知道了 用户付了钱 微信也知道用户付了钱 可是商家不知道客户付了钱
这个时候 需要谁来告诉商家这个事情呢 当然不能是用户 那就是微信啦

这个坑 我填了一个礼拜
关键是重复的通知 我不会处理
后来发现 我只要给微信一个正确的回复 它就不会再来烦我了

尽量不要参考weixin-popular上的处理的回调通知
因为它参考意义不大 (还要自己判断签名 和写回调)

我一开始没有理会这个
先把查询订单的代码写完了
所以等会回过头来再填坑

我用的框架是jeecg-boot 的 这个框架 我也遇到了不少坑
第一个 就是 它的前端 是用vue 写的 可是 我不会 vue
我用了一个蠢办法
就是在控制层 写HTML5 代码 (Writer writer = response.getWriter();) 引用资源的话引用网上的就可以了 不在本地下资源
第二个就是

socketexception:connection reset
这个异常 我看了一个礼拜 应是没有看懂 什么方法都试过 但是我对服务器这块又不是很懂 我们的服务器是通过Nginx代理转发的 这个我也不懂了
直到现在 我也不懂 但是不知道为啥 过了一个中秋回来之后 莫名号了 不管了 累觉无爱 先记录一下 我觉得应该是网络问题 或者是https的问题 这块 是真的不懂

回过头说下 这个某信的回调通知
前面说过我一开始用的是native模式
回调通知的时候 发现需要一个外网可以直接访问的域名 我没有(后来我才知道 有花生壳这种东西) 没有办法 找我们经理要了一个域名 然后请教一下同事 怎么用(捂脸)

写了 3个版本的回调通知
都不对
去某度了一下 发现 微信给你发通知 是采用的封装IO流的方式不是参数传递 同时也某度到了可以拿来就用的代码 copy上去
哈哈 成功了 然后接到通知之后 就是相关业务城的处理

在回过头来 前面说过 我一开始的方向没有作对 因为我们老板要的不是网页商城 而是在公众号完成支付 距离剩下的时间不多了 虽然没有给明确的时间 但是 我感觉boss的态度已经有变化了
接着就是疯狂copy了 把模式改为jsapi模式
这其中最大的难题 我之前一直做的是商户平台 对公众号 不是很熟悉 而且公众号也不是我在管理 只好委托公众号的同事帮我做了 个按钮/接口
点击之后传递一个参数oppid 给我
我用writer写了一个前端页面出来
然后ajax 回调自己控制层的代码 实现支付

这个
socketexception:connection reset 就是在最后这一步出现的 哎

这其中我还遇到了一个问题 jsapi支付的时候 不是需要给前端传递一个参数 签名sign嘛 我在微信官方文档上的签名验证把自己的参数输入进去之后 发现它生成的签名不一致 为什么 看了两天的断点调试 发现是微信官方文档的第一个默认参数是appid=

而实际上需要参数是 appId= 咋一看没有什么区别对不对 我也是这样认为的 微信官方都给你参数了 我应该不用改吧
结果我写了 3个版本的签名验证 发现都一样 就是和官方文档上的签名不一样
最后的最后 我还是看了 它的文档 自己写了一个验证签名的方式 才发现了这个问题
注意了 这个H5页面实际需要的参数是 appId= (大写的 I )

解决好上述的坑 基本上就可以完成了

想看源码的同学 我推荐看这个 这个是jsapi的 不过稍微修改一下 也可以用于native(个人推荐开发模式的模式二 比较简单粗暴)的模式
https://www.jianshu.com/p/5a789c77c38d
对了 最后一个坑 我把代码发布到了服务器上 上 支付的时候 老是会报签名错误
这个翻阅了一下文档 网友们普遍说是 某信的一个bug 需要修改商户的api密钥(此处需要超级管理员权限 ) 我修改之后 果然好了 真的是坑
总结一下 : 从一个微信小白 到把这个微信支付做起来 最重要的还是要不怕失败 我经常换了一个写法还是失败 然后再换一个 还是失败 有很深的挫败感 可是我又很兴奋 那种痛并快乐的感觉 真的爽 每天写一个bug 然后改正它 真的很好玩
所以 还是要学会面对失败 另外还有一点就是很多东西 其实都是有现成的 找到它 用上它 事半功倍谈不上 效率提高30%是真的
我一个小白版 也是到了后期才明白 那些api的作用 确实方便呀 如果让我再来一次支付宝的(如果有这样的需求) 应该10天之内就完成了(还是自己等级太低 经验不够 )
最后说一句 某信你为何这么坑 我某度了下 发现大家都说 下载的php demo 只要给个参数就可以了 java demo 要改十几个类 你这样会失去我的 你知道嘛

问:为啥你的文章 *度 是用某度代替
答 :本人之前是大学兼职是 做淘宝客服 当需要介绍别人家的产品时 我们就用某宝或者某猫或者 某东 某度 来代替 避免不必要的纠纷 我相信大多数人 都应该知道某度是什么吧
问:你自己的源代码呢
答: 不想放,一开始写的太垃圾了。我觉得https://www.jianshu.com/p/5a789c77c38d 这个大神写 的已经很好了 基本copy paste就可以解决了
问:为啥你的许多问题都是后知后觉
答:我要是能先知先觉,还能有这么多问题嘛 不过现在在微信支付这块已经成长了很多了,许多问题解决起来得心应手
有什么问题想要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值