ThinkPHP框架整合微信支付之刷卡模式图文详解


Posted in PHP onApril 10, 2019

本文实例讲述了ThinkPHP框架整合微信支付之刷卡模式。分享给大家供大家参考,具体如下:

大家好,这篇文章是继微信支付之Native 扫码支付 模式二之后的微信支付系列教程第四篇:微信刷卡支付

本教程跟前三篇教程不一样,所需要的类库也不一样,所以做刷卡支付的时候,与之前的方法没多少关系,大家注意一下。

下面开始介绍详细步骤!

step1:下载微信刷卡支付demo,如下图:

ThinkPHP框架整合微信支付之刷卡模式图文详解 

WxPayMicropayHelper:这个文件夹下就是刷卡支付微信提供的类库

demo:这个文件夹下是关于刷卡支付的详细demo

我们来看一下demo文件夹: ThinkPHP框架整合微信支付之刷卡模式图文详解

这里我们要用到

micropay_call.php:这个就是刷卡支付的具体demo

我们可以把里面内容复制下来,放到TP的控制器中(稍后介绍)

step2:把下载下来的微信刷卡支付的类库同样放到Vendor目录下:

ThinkPHP框架整合微信支付之刷卡模式图文详解 

step3:上面的类库放好后我们可以来写控制器里面的内容了首先还是引入类库:

/**
     * 初始化
     */
    public function _initialize()
    {
        //引入WxPayPubHelper
        vendor('WxPayMicropayHelper.WxPayMicropayHelper');
    }

接下来把micropay_call.php下的代码提取出来复制到控制器下,并给个名字:

public function micropay()
    {
        //自定义订单号,此处仅作举例
        $timeStamp = time();
        $out_trade_no = \WxPayConf_micropay::APPID."$timeStamp";
        
        //获取用户一维码
        if (isset($_POST["auth_code"]))
        {
            $auth_code = $_POST["auth_code"];
        
            //使用被扫支付接口
            $micropayCall = new \MicropayCall();
        
            //设置被扫支付接口参数
            //设置必填参数
            //appid已填,商户无需重复填写
            //mch_id已填,商户无需重复填写
            //noncestr已填,商户无需重复填写
            //spbill_create_ip已填,商户无需重复填写
            //sign已填,商户无需重复填写
            $micropayCall->setParameter("body","贡献一分钱");//商品描述
            $micropayCall->setParameter("out_trade_no","$out_trade_no");//商户订单号
            $micropayCall->setParameter("total_fee","1");//总金额
            $micropayCall->setParameter("auth_code","$auth_code");//交易类型
            //非必填参数,商户可根据实际情况选填
            //$micropayCall->setParameter("sub_mch_id","XXXX");//子商户号
            //$micropayCall->setParameter("device_info","XXXX");//设备号
            //$micropayCall->setParameter("attach","XXXX");//附加数据
            //$micropayCall->setParameter("time_start","XXXX");//交易起始时间
            //$micropayCall->setParameter("time_expire","XXXX");//交易结束时间
            //$micropayCall->setParameter("goods_tag","XXXX");//商品标记
            //$micropayCall->setParameter("openid","XXXX");//用户标识
            //$micropayCall->setParameter("product_id","XXXX");//商品ID
        
            //提交订单
            $micropayCallResult = $micropayCall->getResult();
        
            //商户根据实际情况设置相应的处理流程,此处仅作举例
            if ($micropayCallResult["return_code"] == "FAIL") 
            {
                echo "通信出错:".$micropayCallResult['return_msg']."<br>";
            }
            elseif($micropayCallResult["result_code"] == "FAIL")
            {
                echo "出错"."<br>";
                echo "错误代码:".$micropayCallResult['err_code']."<br>";
                echo "错误代码描述:".$micropayCallResult['err_code_des']."<br>";
            }
            else
            {
                echo "用户标识:".$micropayCallResult['openid']."<br>";
                echo "是否关注公众账号:".$micropayCallResult['is_subscribe']."<br>";
                echo "交易类型:".$micropayCallResult['trade_type']."<br>";
                echo "付款银行:".$micropayCallResult['bank_type']."<br>";
                echo "总金额:".$micropayCallResult['total_fee']."<br>";
                echo "现金券金额:".$micropayCallResult['coupon_fee']."<br>";
                echo "货币种类:".$micropayCallResult['fee_type']."<br>";
                echo "微信支付订单号:".$micropayCallResult['transaction_id']."<br>";
                echo "商户订单号:".$micropayCallResult['out_trade_no']."<br>";
                echo "商家数据包:".$micropayCallResult['attach']."<br>";
                echo "支付完成时间:".$micropayCallResult['time_end']."<br>";
            }
        }
        else
        {
            $this->assign('out_trade_no',$out_trade_no);
            $this->display();
        }
    }

这是我写的控制器方法内容,对应micropay.html页面:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>微信安全支付</title>
</head>
<body>
    </br></br>
    <div align="center">
        <form  action="__SELF__" method="post">
            <p>请输入微信刷卡界面的一维码:</p>
            <p><input type="text" name="auth_code" value=""></p>
            <button type="submit">提交</button>
        </form>
    </div>
        
    <div align="center">
        <p>订单号:<?php echo $out_trade_no; ?></p>
    </div>
    
    <div align="center">
    <table>
        <td>
        <form action="./order_query.php" method="post">
            <input name="out_trade_no" type='hidden' value="<?php echo $out_trade_no; ?>">
            <button type="submit" >查询订单状态</button>
        </form>
        </td>
        
        
        <td>
        <form  action="./refund.php" method="post">
            <input name="out_trade_no" type='hidden' value="<?php echo $out_trade_no; ?>">
            <input name="refund_fee" type='hidden' value="1">
            <button type="submit" >申请退款</button>
        </form>
        </td>
        
        <td>
        <form  action="./reverse.php" method="post">
            <input name="out_trade_no" type='hidden' value="<?php echo $out_trade_no; ?>">
            <button type="submit" >冲正</button>
        </form>
        </td>
    </table>
    </div>
        
    <br>
    <div align="center">
        <a href="../index.php" rel="external nofollow" >返回首页</a>
    </div>

</body>
</html>

到此我们就可以去测试一下了

请看页面:

ThinkPHP框架整合微信支付之刷卡模式图文详解

面中刷卡的一维码就是你微信里面钱包下面的刷卡功能,打开后就可以看到你的一维码,这个一维码是过一段时间就自己刷新的,输入进去点击提交,请看微信页面:

ThinkPHP框架整合微信支付之刷卡模式图文详解 

到此,刷卡支付功能也做好啦

微信支付教程jsapi篇:
//3water.com/article/159351.htm

微信支付教程扫码模式一:
//3water.com/article/159356.htm

微信支付教程扫码模式二:
//3water.com/article/159362.htm

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
php数组总结篇(一)
Sep 30 PHP
php遍历目录viewDir函数
Dec 15 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
PHP使用正则表达式清除超链接文本
Nov 12 PHP
php结合ajax实现赞、顶、踩功能实例
May 12 PHP
PHP+Ajax异步带进度条上传文件实例
Nov 01 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 PHP
laravel配置Redis多个库的实现方法
Apr 10 #PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
Apr 09 #PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 #PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 #PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 #PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 #PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
Apr 08 #PHP
You might like
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
Python实现二叉搜索树
2016/02/03 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
Python 面试中 8 个必考问题
2018/11/16 Python
Django分页功能的实现代码详解
2019/07/29 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
劳资人员岗位职责
2013/12/19 职场文书
战友聚会策划方案
2014/06/13 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
会计工作检讨书
2015/02/19 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
Java 数组的使用
2022/05/11 Java/Android