微信公众号支付

最近写了一下微信公众号的支付,可能是楼主实在才疏学浅,看了微信的文档,反反复复了看了好几次,总是感觉隔层纱,有点乱的感觉。。。然后拿到sdk自己测试的话,配置一改,直接就成功了,但是真正放到项目中,又有点无从下手,研究了两天的成果,在此分享给大家,希望能帮我和我一样,刚接触微信开发的朋友。

大前提:微信公众号是公司的,要有对应的商家mchid和商家密钥(百度自己找。。)

楼主在此用的laravel5.1框架+微信jsAPI支付,只是完成了简单的支付,下面开撸:

1、去微信公众号的商户平台,获取mechid和商家密钥,然后配置回调地址

坑!坑!坑!这地方坑了好久!如果你想在/user/pay下面执行支付操作,那么你的授权目录

一定要是/user。

2、准备好配置之后,引入微信支付的SDK,放到libs中,我们的第三方都在这里面。

知道要用的文件:
jsapi.php--->重写到自己的方法中。然后正常根据自己项目的逻辑来,支付的视图
页面采用js方法。

3、下面是视图Js部分,需要自己根据逻辑来写ajax,然后跳转到控制器:

大致说一下这个ajax的逻辑:这里ajax的success方法就是jsapi里面的js方法:

function jsApiCall()。

我们在支付的视图上自己写,当用户选定支付金额之后,用户点击支付,此时,我们通过url跳

到自己的支付逻辑.

window.location.search是为了get传一些参数,大家不用理会。

这块儿的逻辑:(1)通过url进入支付控制器,控制器返回结果是order_json,如果

走ajax的success方法的话,发起微信支付。

(2)发起微信支付,微信会进入你写的回调函数页面,执行回调函数的逻辑,这个咱们

下面再说,这里只说大致的逻辑。

(3)回调函数会返回xml数据给微信,微信识别之后,会返回支付成功或失败。

4、这边是看支付的控制器方法,也就是重写的JSAPI.php的方法:

引入你所需要的文件,,openid在微信授权的页面已经存到数据库了,所以直接拿来用

此时需要引入你需要用的sdk文件,其次是获取openId,因为我在微信授权的时候已经存在

数据库了,所以直接就拿来用了,然后根据自己生成订单的算法,生成订单,并且存入到

数据库中,此时给一个状态值:status,0代表未付款,1代表已付款。为了微信回调时候,

(对比订单数据是否正确)

5、

执行jsapi.php里面的方法,生成订单信息,并传给咱们第3步的ajax。这边的回调地址就写成

你准备处理支付逻辑的控制器路由就可以了。返回的$jsApiParameters就是第3步中的

order_json。

如果成功返回的话,此时是走第3步的第(1)(2)小节,微信访问你的回调地址。

6、此时,微信服务器会去访问你的回调控制器,

这个方法就是回调地址的路由对应的方法,注释部分是微信访问该方法时自带的xml数据,

也是订单的数据,在这里,我们需要先获取微信传过来的数据,并把这些数据转换为数组格式,

取得其中的一些值,进行比对操作。

在回调控制器里面先验证签名(我这边签名重写了一下)然后查询订单,如果有订单,则执行你的逻辑。

我自己重写了一下验证签名的方法,和微信的差不多,只不过传入的值变成了咱们转换

xml数据得到$arr数组。

7、先验证签名,然后根据微信传过来的订单号,查询数据库中你已经存储过的订单号,

订单号一致的时候,执行你自己的业务逻辑。(比如增加用户消费啊之类的,记得把

订单状态改为已支付),下面是返回给微信的格式:

成功或者失败都必须是这个xml数据,只有这样,微信才能成功识别success或者fail。

8、回调函数返回xml数据之后,我们走到我们 第3步的(3)小节,此时

根据官方给出文档的写法,当Js的res.err_msg == "get_brand_wcpay_request:ok" 代表

支付成功。此时算是支付成功了,你查看自己的数据库,看看订单状态等是否发生变化。


总结:我个人觉得微信支付应该没有我写的这么麻烦的,可能是我第一次做微信

支付的原因的吧,以前都是做app和网站,对微信还不太熟悉,所以走了很多弯路。

在此呢,算是很仔细的记录下了这个微信支付的流程,大家根据我的这个流程和思路

来写支付,应该是没什么问题的。当然,如果大家都更好的方法或者demo,请在

下方留言,大家一起学习进步。

写的时候比较仓促,毕竟是在上班时间写的,左顾右盼的生怕被老大发现我

没有在干活,,,苦逼,所以有什么问题的话,也可以在下面留言,大家相互讨论,

能帮助一些朋友是最好的。

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值