微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解


Posted in PHP onApril 10, 2019

本文实例讲述了ThinkPHP框架下微信支付功能。分享给大家供大家参考,具体如下:

声明:原文主要摘自白俊遥博客 ,部分内容针对个人事例已作修改,主要用于自己的参考,欢迎指正。

注意:微信公众号支付,强烈建议使用外网可访问的链接测试,否则即便代码正确也无法调出支付界面,可使用草料二维码生成可扫描图片,也可直接在微信中输入网址。

使用框架:ThinkPHP 3.2.3

一.微信公众平台信息配置

1).进入微信公众平台

由左侧的“微信支付”进入配置界面,添加或修改正确的支付授权目录,注意该目录的要求,多建议精确到上一级目录,并加斜线 / 微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

2).授权域名

注意】:

    域名的确定都是工信部备案过的,初次开发的很容易漏掉“www”,而截图中不加“www”是因为我们备案的原因,记得只去掉“http://”。

微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

二.ThinkPHP 框架,相应代码配置

    公众号支付->场景参考

1).Weixinpay.php文件处理

    导入 Weixinpay.php文件到“/ThinkPHP/Library/Vendor/Weixinpay/”目录下

    微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

    2).配置

    在项目的配置文件中,添加类此如下的代码,,其中的值需要自己根据实际公众号的信息进行配置【注意】:     很多人会搞错MCHID而造成不必要的时间浪费,具体开发参照官方文档。

/Application/Common/Conf/config.php

微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

    3).支付函数的编辑

     即进行点击支付后的界面,其自动调用微信的默认支付框架。

【注意】

    进行支付逻辑的处理,一定要记住,要求使用GET方式请求此页面,即使用 get 方式将总金额、订单号提交过来进行处理,$data 可以接收

    微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

4).getParameters修改

    上述文件,需要修改其中的 getParameters()方法,其中标记的位置,是根据实际的业务情况而从数据库获取的。具体代码后面会有提供。

微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

5).上述函数,需要html的配合:/M/View/Cart/pay.html

    微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

    6).回调函数的编辑

【注意】

    该路径必须要与配置文件中的回调路径一致,此回调函数,是根据微信是否真正完成支付后的数据更新,一般此处进行订单状态的修改,比如,我在此处异步执行的是将订单号的支付状态参数由0置为1.

    [个人测试发现,此处 session 和 cookie 的设置都失效,仅做参考]

微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
【注意】:    

先前发现,因为微信服务的设计,会多次回调 notify()以判断是否真正的支付成功,而简单的update 操作是无法检测的,为了同自己的平台相关联,同理需要进行状态的判断,否则不可避免的会多次执行 notify_wx()中的逻辑处理

    7).如果是整合到自己的项目中

        需要在自己的公共函数中增加 curl_get_contents 微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

    8).补充:

    (1).提醒:所提供的源代码,剥离出了微信支付的核心,注意html页面中对jquery.js的正确引用,pay.html基本是从微信公众号官网直接下载的demo页,同时使用代码前请配置微信支付url,且外网测试。

(2).此功能开发中所遇到的各种坑!强烈建议参考、批评.【重要

三.微信扫码支付

1).场景分析

>场景参考

>一般的网站开发中,如果是手机端,多数使用上面提到的公众号支付方式,而扫码支付多数出现在PC端,当然也有部分手机网站有生成二维码的需求,但是由于微信浏览器的识别限制,一种情况是直接在微信端浏览的购物网站,通过长按二维码就可以识别;另一种情况是在另外的手机端浏览器,比如百度、头条。 >如此一来除非用另一部手机进行扫码支付,或者将二维码截图保存后,再到微信中找到图片进行长按识别。显然后者用法过于繁琐,所以处分针对于微信浏览器开发,否则不建议使用扫码支付功能,而在PC端开发则适合使用该功能

2).功能开发

通用上文中介绍的功能开发步骤 1)、2)、3)、6)、7)

3).补充函数

在 common/function.php 中补充函数 weixinpay()和 qrcode() 微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

4).设计显示微信扫码的页面

    我定的页面为 M/Order/mobilepayment.html,即通过访问 Order/wechatpaymenter ,同时调用微信生成二维码,在该页面的 <img> 标签中显示出来,具体代码见后面的附录 微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

5).补充 wechatpaymenter 方法。

微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

6).注意:

    模式二生成的二维码也是有时间限制的,同时,不能有权限拦截,并且,二维码的生成是根据订单号唯一确定的,如果生成一次,那么很可能第二次就不显示,建议可用 time()代替测试。

扫码支付模式参考

7).运行结果截图

在信息配置正确的情况下,功能结果如图所示

微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解

四.附录

1.源代码参考 >>>

2.提醒:

  注意微信配置的正确性,如果有误,微信支付会有报错,二维码则会无法生成.多参考官方文档加深理解也是不错的选择。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 各种排序算法实现代码
Aug 20 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
Nov 02 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 PHP
php实现表单提交上传文件功能
May 28 PHP
PHP实现的CURL非阻塞调用类
Jul 26 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
Aug 05 PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
thinkphp5 路由分发原理
Mar 18 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 #PHP
ThinkPHP框架实现的微信支付接口开发完整示例
Apr 10 #PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
Apr 10 #PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
Apr 10 #PHP
微信公众平台开发教程②微信端分享功能图文详解
Apr 10 #PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
Apr 10 #PHP
laravel配置Redis多个库的实现方法
Apr 10 #PHP
You might like
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
深思 PHP 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
PHP编写简单的App接口
2016/08/28 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
php引用和拷贝的区别知识点总结
2019/09/23 PHP
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
wxpython 学习笔记 第一天
2009/03/16 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
python中update的基本使用方法详解
2019/07/17 Python
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题