微信公众平台开发教程④ 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
Nov 25 PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
利用php下载xls文件(自己动手写的)
Apr 18 PHP
PHP生成短网址的3种方法代码实例
Jul 08 PHP
php正则preg_replace_callback函数用法实例
Jun 01 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
PHP实现的oracle分页函数实例
Jan 25 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
Mar 21 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
PHP进程通信基础之信号量与共享内存通信
Feb 19 PHP
Django 中 cookie的使用
Aug 17 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
Zend Framework入门知识点小结
2016/03/19 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
Python 变量的创建过程详解
2019/09/02 Python
Python笔记之facade模式
2019/11/20 Python
python画环形图的方法
2020/03/25 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
浅析python实现动态规划背包问题
2020/12/31 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
新农村建设汇报材料
2014/08/15 职场文书
股东授权委托书范本
2014/09/13 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS