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 相关文章推荐
一个更简单的无限级分类菜单代码
Jan 16 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
thinkphp模板继承实例简述
Nov 26 PHP
PHP实现文件下载详解
Nov 27 PHP
php如何执行非缓冲查询API
Jul 22 PHP
PHP从二维数组得到N层分类树的实现代码
Oct 11 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
php 猴子摘桃的算法
Jun 20 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
php的优点总结 php有哪些优点
Jul 19 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
Oct 21 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 self与$this的详解
2013/06/08 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
php提交post数组参数实例分析
2015/12/17 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
Python中的魔法方法深入理解
2014/07/09 Python
python将ip地址转换成整数的方法
2015/03/17 Python
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
python实现简易学生信息管理系统
2020/04/05 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
绩效工资分配方案
2014/01/18 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
经验交流材料格式
2014/12/30 职场文书
加入学生会自荐书
2015/03/05 职场文书