页面上的微信支付做的是扫码支付,大致过程是,后端调用微信的下单接口,获取到code_url,根据code_url处理然后生成二维码,用户打开微信扫描二维码,在手机微信支付相应的金额,最后微信服务器给你的支付微信发送一条消息,同时给你的回调接口发起异步回调,这个回调不是显示回调,你直接访问这个回调页面是不能看见任何东西的,你获取的xml一直会为空,你写好日志,或者写一条插入数据库的语句,你就可以看见这个回调方法在你支付成功的时候是执行成功了的。

      接着是分享一下自己在做微信支付中遇到的问题,首先你得把需要的一些信息获取,获取都是去微信支付官方开通什么的,最后会有一个appid,这个是微信公众号的APPID,接着你开通商户之后会有一个商户mechid,然后还需要你自己设置的一个key值,还有一个appsecret ,这个是在你退款那些需要的,下单不需要。

      刚开始看了一下微信官方提供的sdk,用这个自己尝试了很多次,一直是内部函数报错。之前一直认为官方的应该不会有问题吧,是不是自己的那里写错了,后面检查了很久,看他的代码,最后确定不是自己的错,我觉得这就是官方sdk里面有问题,虽然我觉得这不太可能没但是就是有问题,在这官方的上面耗费了很多时间,最后发现不能用,只有去自己找找有没有什么好的sdk可以拿来用用,在github上面找到了一个,附上网址:https://github.com/kunx-edu/wxpay-tp5

      用sdk直接把参数配置好,调用方法就可以下单,下单成功之后会返回一个code_url,根据这个url调用sdk中的方法生成二维码,做到这一步,你的第一大步就好了,下单成功。第二步就是回调的问题了,回调这里不得不说,坑了我好久,一直就感觉这里有问题,微信异步回调:在你下单成功生成二维码,扫描二维码并支付成功之后发起,在这里再说一点,就是前面生成二维码的在本地服务器上面都可以测试,都能成功,不过回调必须在服务器上测试,不然是不会有值的或者有各种问题,一定要先写好日志什么的,你才知道回调回来的具体内容,是否回调成功没。刚开始是认为回调一直没有成功,在微信后台开发配置,要配置好回调地址,这个回调地址跟你传入下单接口的回调一样就行,必须是备案好的域名,不支持IP。把这个配置好之后,再就是接受回调的方法file_get_contents("php://input"),用这个接收,这样写好了之后应该就可以获得回调了,回调的是xml形式,可以写入文件什么的查看里面具体有什么值,便于后面处理一些逻辑,最后当return_code为SUCCESS的时候,回调成功,不过在这后面还遇到一个很烦很烦的问题,在回调的数据得不到,如果这个有问题,可以自己写回调的逻辑,还有就是多次回调,这个问题真的是恶心,,在服务器上面测试的时候在自己的linux服务器上面测,回调一次,完全没有什么问题,在他们的windows服务器上测的时候,各种回调多次,搜了很多博客,严格按照微信官方文档上说的那样xml形式返回,输出,返回true,输出true,返回SUCCESS,输出SUCCESS,返回文档上的xml 形式,输出还是一样的,还是多次回调,找了各种资料,试了各种方法,最后还是没有解决。自己也没有具体查出来到底是什么问题,但是这个通过逻辑解决了,当你存入数据库的时候带上订单号(因为此值是唯一的),通过这个判断,如果数据库里面有这个数据的时候,就不再往里面插入值,这样这个问题就解决了,最后又发现在微信回调的时候获取不到自己存好的uid,如果没有uid就没法辨认是网站上面哪一个用户充值的了,这里提供一个解决办法:

在里创建订单的时候,这时候还可以获取到session值,把session值uid和自己在下订单时的参数out_trade_no(此值也是唯一的),把这两个值一起作为一条数据存入一张自己建立的数据表中,在回调的时候在通过返回的out_trade_no在这个数据表中查出uid就行了。

     这样微信支付就做好了,也是花费了自己快一周的时间(自己段段续续的在做,遇到问题找bug找得心累),分享一下自己遇到的问题和思路,希望对有同样问题的小伙伴有帮助哦。