您的位置:首页 > 移动开发 > 微信开发

【php应用】微信支付小结

2015-12-24 18:23 465 查看

简介

微信支付有多种支付方式,一般电商用到的有两种,一种是公众号支付,一种是扫码支付。

公众号支付就是在公众号内支付,当用户通过微信公众号进入商家平台时可以调用这种支付方式。这种支付方式是基于微信浏览器的js接口实现的,在其他浏览器上无法调用,这种支付方式的好处是被调用的时候,可以直接弹出支付码提示框,用户只需要输入支付码就可以完成支付,方便快捷。

扫码支付一般是用在pc网站上的,当需要支付的时候,电商平台展示一张用于支付的二维码,用户通过扫码来实现支付。

公众号内支付

首先说公众号内支付。公众号内支付主要是通过调用微信浏览器内部的js来实现,在js中加入本次支付的标记字串,这段标记字串的生成是支付流程的重点。

这里的基本流程首先是用户在网站下单,网站在收到客户提交的订单信息之后生成站内订单信息,然后调用微信的统一下单接口来生成支付订单,微信支付系统在生成支付订单之后返回给客户端一个预付单的信息,就是我们方才说的标记字串。


这里有个需要注意的地方,在网站调用微信的统一下单工具的时候,需要登陆授权获取用户的openid。这个过程其实是在调用授权接口的时候,网站跳转到了微信的服务器,然后再跳转回来。

比如,用户访问的是

http://www.zhifu.php

访问时,网站会跳转到
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri= href="http://www.zhifu.php/" target=_blank>http://www.zhifu.php&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

然后微信再次跳转回来,当再次跳转回http://www.zhifu.php时,会携带有用户的openid。但是问题在于,这个跳转是get形式的。所以,如果用户通过post形式向
http://www.zhifu.php提交了数据,那么post数据在这两次跳转之间会丢失。

扫码支付

关于扫码支付,也类似,不过他有两种模式。

经常被用到的模式是 首先用户在网站下单之后,网站调用微信的统一下单接口来生成一个支付订单,然后返回给用户一个标记字串,网站使用标记字串来拼接微信的url生成一个二维码图片,用户扫码,支付。完成后,微信支付系统会通知网站改订单已经支付完成。这种方式适用于常规商城购物。

另一种模式,是用户首先扫描二维码,这个二维码是网站按照微信支付系统的规定生成的,当用户扫码的时候,会打开微信支付系统,微信支付系统根据二维码里携带的信息请求商家的网站,然后商家网站根据微信支付系统的请求生成站内订单。然后商家网站再调用微信的统一下单接口生成支付订单,微信再去请求用户输入支付密码,完成支付。这种方式类似于在第一种的情况下将二维码变成了一个用户下单的入口,在购买这个过程中提前了位置,关于它的应用,好像想到了顺丰的黑客体验店。

遇到的问题解决:

1·公众号支付,微信接口报参数不全。

这个问题有多重可能,开发者确实忘记写参数了,这个不在讨论之列。我遇到的情况就是文中的获取用户openid引起的。在开发时,支付动作的参数提交是使用的post方式,但是获取用户openid的过程需要跳转到微信支付系统,再跳转回来,这样一周转,post数据就丢失了。不知道这个算不算是微信的一个坑,我是将请求转为了get请求,话说在周转的过程当中,受制于系统的本身设计,还费了还大一番周折。

2·微信支付提示 time_expire参数错误。

先说下,这个问题在我们测试服务器上并不存在,后来转移到新的服务器上之后,出现了这个错误。这个参数是用来设置交易结束时间,也就是订单失效时间的。我这里出现错误,是因为服务器的时区设置,不是北京的时区,错了八个小时。

我的博客:http://www.sibowen.com/index.php?m=Home&c=Article&a=viewArticle&classifyId=17&articleId=16
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: