微信测试号授权+廖师兄支付账号调试经验分享
来源:8-3 在网页发起支付
杨勤_cd
2018-12-22
声明:
本文分享只适合无微信公众服务号的童鞋参考。
我等穷屌丝一没公司开服务号,二没营业执照去接通微信支付,但是我们又有梦想,想要下尝试微信支付的功能,所以就得额外的费些心思了~
最终效果:手机微信可以打开sell系统,可以下单并支付成功(请自行忽略系统图片及文字内容)
配置信息:mpAppIdTest,mpAppSecret为微信公众测试账号(所有屌丝均可免费获取),其他配置信息来源于师兄文档,openIdPro请关注“师兄干货”获取。
项目流程分析:
1.手机登录是怎么访问到本地代码的?
答:电脑通过sell.com能访问到项目,是因为本地配置了hosts文件,电脑访问时优先从hosts文件解析域名,刚好是指向我们虚拟机的ip,所以能访问。那么手机怎么访问呢?直接输入sell.com肯定是不行的,那样只会从dns解析到对应ip,碰巧能解析到,所以手机上会看到一个长相奇怪的网站。但是我们可以考虑将手机的请求转给我们电脑,电脑再去查找hosts文件,就能访问到了。
手机通过配置代理连接到本地电脑,设置监听端口,如:8888,手机发出去的请求就会先转到本地电脑的8888端口号上,再由本地这个端口发出去;但是我们需要使用工具来监听这个端口,这里我使用的是Filder,默认监听的就是8888,但是要注意勾选允许远程机器连接,否则手机是访问不到的:
启动Fillder后,查看8888端口,果然被Fillder监听了,证明没有问题。
win查看端口监听命令:netstat -aon|findstr “8888”
备注:请使用Fillder安装版,因为我曾经使用免安装版,手机访问时,遇到了SocketException异常
2.为什么使用natapp域名?
答:当用户选择同意微信授权请求时,微信响应的授权数据只能传递给指定域名下的页面(设置位置:微信公众测试号平台->网页服务->网页账号->网页授权获取用户基本信息),因此我们本地的代码,想要接收这个授权数据,就必须把域名配置在微信公众号那个位置,然而你不可能将localhost配置到那里吧?他怎么知道localhost是哪个ip!所以需要一个公网,natapp可以给你一个公网域名映射到本地,从而实现上述目的。
3.授权过程:
没什么好说的,账号秘钥都使用的公众测试账号,很容易调通
如下:和师兄视频一样,唯一不同的是红框标注部分,使用师兄的openId(原因后面说)
授权后页面重定向到:http://sell.com/#/?openid=oTgZpwb0LVceqKVS6B4Qn7CjW_mA
重定向后,前端会设置一个openId的cookie信息(理论上是这样,实际上,当我们用手机访问时,下订单的时候后台会报错:创建订单失败,openid不能为空,这是因为返回到list页面的时候,没有返回cookie信息,需要刷新下页面再次下单就可以了,至于为什么初次没有存进cookie,不太确定。初步怀疑是Fillder收到带#号格式的请求后,没有一次性转发出去?)
4.支付
支付需要mpAppId,openid,mchId,mchKey,且必须配套,也就是同一个微信号上的关联内容,前面授权的appid用的微信公众测试账号,这里支付的appId设置成师兄的appId:
我租用的师兄账号。你可能会讲,这些账号师兄文档不都给了嘛,为什么叫租呢?
是这样的,当我们发起支付请求时,请求地址就是你前端项目此处配置的地址:
我们最开始配置的可能是像这样的:vsmile.natapp.cc/sell/pay/create
这样没有问题,能正确运行我们本地的代码。可我们在手机端支付时,可能会遇到弹框报错:当前页面URL未注册(据说只有iphone才有报错,安卓就是一片空白,没办法,穷屌就是这个待遇),这是因为我们用到的“师兄干货”这个公众号里配置的支付授权目录是:http://proxy.springboot.cn/pay,
所以我们当前域名是没有权限去支付的。怎么解决呢?我们可以找师兄配置一下就可以了嘛,然而这个授权目录是有数量限制,貌似是5个?,就算师兄有心也无力,除非学习这门课程且是穷屌的只有5个及以下~
对于这个困惑,“师兄干货”里面已经给出了简单高效的解决方案:花钱。
注意信息要填写正确,外网地址填写完整,我填写的是:http://vsmile.natapp1.cc/sell/pay/create
付钱以后,使用http://proxy.springboot.cn/pay 就能映射到你指定的域名了,前提是你提交的openId要正确,才能建立这个映射,这也是为什么步骤3授权中返回的openId要设置成师兄账号的openID。
总结来讲:发起支付请求>>访问前端配置支付地址(proxy.springboot.cn/pay, 如果openId正确,这个地址会映射到你指定的地址:http://vsmile.natapp1.cc/sell/pay/create)>>这个地址在微信支付授权目录下>>相关信息验证通过>>支付成功。
当前遗留问题:手机创建订单的时候必须刷新页面,才能创建成功,否则提示openId为空
以上算是纯个人理解,如果还有什么其他问题,可以留言讨论~
其实我有一个最大的困惑,为什么师兄不干脆把mpAppSecret分享出来呢,那样我们授权+支付都用师兄账号岂不省事?
3回答
-
廖师兄
2018-12-24
这个地方应该能跳转才对,你试试不用fiddler能跳转吗?
00 -
杨勤_cd
提问者
2018-12-23
【遗留问题求助】
【问题描述】手机通过Fillder代理进入系统,选购商品并点击支付后,页面无反应;后台报错:创建订单失败,OpenId不能为空!
【初步分析】
请求授权过程中,获取accessToken的方法,即getAccessToken()的返回值能获取到:
http://sell.com/#/?openid=oTgZpwb0LVceqKVS6B4Qn7CjW_mA,但是却不能被正确重定向,导致前端获取不到cookie的值,因此openID为空,创建订单失败,下图为该流程全部请求截图:
创建订单请求,cookie中没有openId的值,所以报错
【规避方法】手动刷新页面可以重新发出sell.com/这个请求,并获取到cookie:
【辅助信息】
后台相关代码:
前台相关代码:
-------------------------------------------
求告知问题出现根因,及彻底解决办法~
012020-04-11 -
廖师兄
2018-12-22
有了mpAppSecret就可以修改公众号里的按钮了,还可以自定义回复消息,推送消息等等。。。
总结得非常好,注意把慕课网uid打马
032018-12-24
相似问题