美文网首页
Tp5 微信扫码支付

Tp5 微信扫码支付

作者: 风度翩翩的程序猿 | 来源:发表于2020-05-28 15:35 被阅读0次

趁热打铁,把微信支付demo集成到tp5里面,实现微信扫码支付~~~
下载demo,目录结构如下:

1590650411(1).jpg
把 lib 文件夹拿出来,放到tp5根目录 vendor 文件夹下,重命名为wxpay:
20181121183143881.png
把 example 文件夹下的 WxPay.Config.php 拿出来,放到wxpay目录下,修改require_once,并配置支付参数:

<?php
 
require_once "WxPay.Config.Interface.php";
class WxPayConfig extends WxPayConfigInterface
{
    //APPID
    public function GetAppId()
    {
        return 'xxx';
    }
 
    //商户号
    public function GetMerchantId()
    {
        return 'xxx';
    }
 
    //支付回调url
    public function GetNotifyUrl()
    {
    return "xxx";
    }
 
    //签名和验证签名方式, 支持md5和sha256方式
    public function GetSignType()
    {
    return "HMAC-SHA256";
    }
 
    //curl代理
    public function GetProxy(&$proxyHost, &$proxyPort)
    {
    $proxyHost = "0.0.0.0";
    $proxyPort = 0;
    }
 
    //上报错误等级
    public function GetReportLevenl()
    {
    return 1;
    }
 
    //KEY:商户支付密钥
    public function GetKey()
    {
    return 'xxx';
    }
 
    //APPSECRET:公众帐号secert
    public function GetAppSecret()
    {
    return 'xxx';
    }
 
    //证书路径
    public function GetSSLCertPath(&$sslCertPath, &$sslKeyPath)
    {
    $sslCertPath = 'http://www.xxx.com/cert/apiclient_cert.pem';
    $sslKeyPath = 'http://www.xxx.com/cert/apiclient_key.pem';
    }
}

关于证书存放位置:


20181121195048825.png

修改 WxPay.Api.php 第二个require_once:

require_once "WxPay.Config.php";

Wxpay.php控制器也可以是接口:


<?php
namespace app\index\controller;
use think\Controller;
class Wxpay extends Controller
{
    public function index(){
        header("Content-type:text/html;charset=utf-8");
 
        require VENDOR_PATH.'/wxpay/WxPay.Api.php'; //引入微信支付
        $input = new \WxPayUnifiedOrder();//统一下单
        $config = new \WxPayConfig();//配置参数
 
        //$paymoney = input('post.paymoney'); //支付金额
        $paymoney = 1; //测试写死
       //商户订单号(自定义) 以B区分 回调的时候获取订单id $orderInfo是订单信息
       $out_trade_no = 'WXPAY'.date("YmdHis").'B'.$orderInfo['id'];
        $goods_name = '扫码支付'.$paymoney.'元'; //商品名称(自定义)
        $input->SetBody($goods_name);
        $input->SetAttach($goods_name);
        $input->SetOut_trade_no($out_trade_no);
        $input->SetTotal_fee($paymoney*100);//金额乘以100
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("test");
        $input->SetNotify_url("http://www.xxx.com/wxpaynotify"); //回调地址
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id("123456789");//商品id
        $result = \WxPayApi::unifiedOrder($config, $input);
 
        if($result['result_code']=='SUCCESS' && $result['return_code']=='SUCCESS') {
            // 返回的是生成二维码的地址
            $url = $result["code_url"];
            $this->assign('url',$url);
        }else{
            $this->error('参数错误'); 
        }
        return view();
    }
}

前台要生成扫码支付的二维码。把demo中 example 文件夹下的 phpqrcode文件夹 和 qrcode.php 拿出来,我放到了项目根目录/public下面:


2018112119413628.png

然后页面中使用img标签加载二维码即可:

<img class="wxpay_img" src="/qrcode.php?data={$url}" alt="扫码支付">

测试生成了一个二维码(这里做了马赛克处理):


20181122090045262.png

扫码支付测试:


20181122090403157.png
补充:支付的回调函数 和 生成签名算法
public function wxpaynotify() {
    // 获取微信回调的数据
    $notifiedData = file_get_contents('php://input');
 
    //XML格式转换
    $xmlObj = simplexml_load_string($notifiedData, 'SimpleXMLElement', LIBXML_NOCDATA);
    $xmlObj = json_decode(json_encode($xmlObj), true);
 
    //支付成功
    if ($xmlObj['return_code'] == "SUCCESS" && $xmlObj['result_code'] == "SUCCESS") {
        foreach ($xmlObj as $k => $v) {
            if ($k == 'sign') {
                $xmlSign = $xmlObj[$k];
                unset($xmlObj[$k]);
            };
        }
        $sign = $this->WxSign($xmlObj);
        if ($sign === $xmlSign) {
             //获取订单的id 上面说到的B分割这样用起来会方便一些
             $trade_no = explode('B',  $xmlObj['out_trade_no']); //商户自定义订单号
                $transaction_id = $xmlObj['transaction_id']; //微信交易单号
                //订单的id
                $id = $trade_no[1]; 

            //此处为订单处理逻辑...
 
            //返回成功标识给微信
            return sprintf("<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>");
        }
 
    }
}
 
//微信签名算法
private function WxSign($param)
{
    $signkey = 'xxx';//api秘钥
    $sign = '';
    foreach ($param as $key => $val) {
        $sign .= $key . '=' . $val . '&';
    }
    $sign .= 'key=' . $signkey;
    $sign = strtoupper(MD5($sign));
    return $sign;
}

本人也是新手,学会了记下来,这是提高学习的好方法!!!!!!有更好的办法,请大佬们前来指导!

相关文章

  • Tp5 微信扫码支付

    趁热打铁,把微信支付demo集成到tp5里面,实现微信扫码支付~~~下载demo,目录结构如下: 把 lib 文件...

  • 探索:CodeIgniter集成微信扫码支付方案

    微信扫码支付API文档下载地址:微信扫码支付API文档下载 1. 集成微信扫码支付的CI目录结构 ├─config...

  • 免费第三方支付平台公司

    通道已全面开通啦 微信扫码,支付宝扫码,公众号,支付宝wap, 通道已全面开通啦 微信扫码,支付宝扫码,公众号,支...

  • 02_微信扫码支付接口开发

    @Author wangwangjie转载请标明出处~~~ 1. 微信扫码支付快速接入 至此,微信扫码支付开发就完...

  • 一个扫码支付满减活动方案

    背景 某行开发的聚合支付系统,聚合了微信扫码支付、支付宝扫码支付以及本行手机银行扫码支付。通过对本行手机银行扫码支...

  • 肖威洞察 | rails实现pc商城的微信扫码支付(native

    摘要:rails实现pc商城的微信扫码支付(native wechat pay) pc商城扫码支付,调用微信统一下...

  • 微信公众号开发

    采用 TP5 + vue 实现如下功能 微信登录微信分享微信支付 微信登录 前端输入参数跳转 前端获取code码 ...

  • 微信扫码支付的两种模式

    最近项目中用到微信支付,好久没用了,扒一扒微信扫码支付。 微信扫码支付分两个模式 共同点(流程都包括以下两步骤) ...

  • TP5 整合微信扫码支付

    摘要 为了便于微信开发,此处在ThinkPHP5.0 框架下整合了微信扫码支付的功能,测试需要外网项目部署. 对于...

  • python 微信支付

    微信支付的3种方式: Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模...

网友评论

      本文标题:Tp5 微信扫码支付

      本文链接:https://www.haomeiwen.com/subject/vrkaahtx.html