• thinkphp.2 thinkphp5微信支付 微信公众号支付 thinkphp 微信扫码支付 thinkphp 微信企业付款5


    前面已经跑通了微信支付的流程,接下来吧微信支付和微信企业付款接入到thinkphp中,版本是3.2

    把微信支付类、企业付款类整合到一起放到第三方类库,这里我把微信支付帮助类和企业付款类放到同一个文件了:

    把Payment整个文件夹放到ThinkPHPLibraryVendor文件夹下面,

    打开WxPay.pub.config.php,配置四个参数即可,然后把微信提供的证书放到caccert文件夹;这样就完成了支付和企业付款的所有代码配置!

    //=======【基本信息设置】=====================================
        //微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看
        const APPID = '';
        //受理商ID,身份标识
        const MCHID = '';
        //商户支付密钥Key。审核通过后,在微信发送的邮件中查看
        const KEY = '';
        //JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看
        const APPSECRET = '';

    在 Application/Home/Controller目录,建立WxPayController.class.php,下面是公众号支付和扫码支付模式2的方法

    /*微信公众号支付*/
        public function jsapi($openid,$amount){
            Vendor('Payment.WxPay.WxPayPubHelper.WxPayPubHelper');
            //使用jsapi接口
            $jsApi = new VendorPaymentWxPayWxPayPubHelperJsApi_pub();
            //=========步骤1:网页授权获取用户openid============
            //通过code获得openid
    
            //=========步骤2:使用统一支付接口,获取prepay_id============
            //使用统一支付接口
            $unifiedOrder = new VendorPaymentWxPayWxPayPubHelperUnifiedOrder_pub();
    
            //设置统一支付接口参数
            //设置必填参数
            $unifiedOrder->setParameter("openid","$openid");//商品描述
            $unifiedOrder->setParameter("body","充值");//商品描述
            //自定义订单号,此处仅作举例
            $timeStamp = time();
            $out_trade_no =$timeStamp;
            $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号
            $unifiedOrder->setParameter("total_fee",$amount*100);//总金额
            $unifiedOrder->setParameter("notify_url",$this->notify_url);//通知地址
            $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
            $prepay_id = $unifiedOrder->getPrepayId();
    
    
            //=========步骤3:使用jsapi调起支付============
            $jsApi->setPrepayId($prepay_id);
    
            $jsApiParameters = $jsApi->getParameters();
            $data['jsApiParameters'] = $jsApiParameters;
            $data['out_trade_no'] = $out_trade_no;
            return $data;
        }
    
        //JSAPI支付通知
        public function notify(){
            //使用通用通知接口
            Vendor('Payment.WxPay.WxPayPubHelper.WxPayPubHelper');
            $notify = new VendorPaymentWxPayWxPayPubHelperNotify_pub();
    
            //存储微信的回调
            $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
            $notify->saveData($xml);
            //验证签名,并回应微信。
            //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
            //微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
            //尽可能提高通知的成功率,但微信不保证通知最终能成功。
            if($notify->checkSign() == FALSE){
                $notify->setReturnParameter("return_code","FAIL");//返回状态码
                $notify->setReturnParameter("return_msg","签名失败");//返回信息
            }else{
                $notify->setReturnParameter("return_code","SUCCESS");//设置返回码
    
            }
            $returnXml = $notify->returnXml();
            echo $returnXml;
    
            //==商户根据实际情况设置相应的处理流程,此处仅作举例=======
    
            //以log文件形式记录回调信息
            $log_name= dirname(__FILE__)."/../../../Public/Weixin/notify_url.log";//log文件路径
            $log_ = new VendorPaymentWxPayWxPayPubHelperLog_();
            $log_->log_result($log_name,"【接收到的notify通知】:
    ".$xml."
    ");
    
            if($notify->checkSign() == TRUE)
            {
                if ($notify->data["return_code"] == "FAIL") {
                    //此处应该更新一下订单状态,商户自行增删操作
                    $log_->log_result($log_name,"【通信出错】:
    ".$xml."
    ");
                }
                elseif($notify->data["result_code"] == "FAIL"){
                    //此处应该更新一下订单状态,商户自行增删操作
                    $log_->log_result($log_name,"【业务出错】:
    ".$xml."
    ");
                }
                else{
                    //此处应该更新一下订单状态,商户自行增删操作
                    $log_->log_result($log_name,"【支付成功】:
    ".$xml."
    ");
                    //商户自行增加处理流程,
                    //例如:更新订单状态
                    //例如:数据库操作
                    //例如:推送支付完成信息
    
                }
    
            }
        }
    
        //微信扫码支付 模式2
        public function native_pays($amount){
            //全局引入微信支付类
            Vendor('Payment.WxPay.WxPayPubHelper.WxPayPubHelper');
            //使用统一支付接口
            $unifiedOrder = new VendorPaymentWxPayWxPayPubHelperUnifiedOrder_pub();
    
            //设置统一支付接口参数
            //设置必填参数
            //appid已填,商户无需重复填写
            //mch_id已填,商户无需重复填写
            //noncestr已填,商户无需重复填写
            //spbill_create_ip已填,商户无需重复填写
            //sign已填,商户无需重复填写
            $unifiedOrder->setParameter("body","充值");//商品描述
            //自定义订单号,此处仅作举例
            $timeStamp = time();
            $out_trade_no = $timeStamp.$this->user_id;
            $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号
            $unifiedOrder->setParameter("total_fee",$amount*100);//总金额
            $unifiedOrder->setParameter("notify_url", $this->notify_url);//通知地址
            $unifiedOrder->setParameter("trade_type","NATIVE");//交易类型
            //非必填参数,商户可根据实际情况选填
            //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号
            //$unifiedOrder->setParameter("device_info","XXXX");//设备号
            //$unifiedOrder->setParameter("attach","XXXX");//附加数据
            //$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间
            //$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间
            //$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记
            //$unifiedOrder->setParameter("openid","XXXX");//用户标识
            //$unifiedOrder->setParameter("product_id","XXXX");//商品ID
    
            //获取统一支付接口结果
            $unifiedOrderResult = $unifiedOrder->getResult();
    
            //商户根据实际情况设置相应的处理流程
    //        if ($unifiedOrderResult["return_code"] == "FAIL")
    //        {
    //            //商户自行增加处理流程
    //            echo "通信出错:".$unifiedOrderResult['return_msg']."<br>";
    //        }
    //        elseif($unifiedOrderResult["result_code"] == "FAIL")
    //        {
    //            //商户自行增加处理流程
    //            echo "错误代码:".$unifiedOrderResult['err_code']."<br>";
    //            echo "错误代码描述:".$unifiedOrderResult['err_code_des']."<br>";
    //        }
            if($unifiedOrderResult["code_url"] != NULL)
            {
                //从统一支付接口获取到code_url
                $code_url = $unifiedOrderResult["code_url"];
                //商户自行增加处理流程
                //......
            }
            //$this->assign('out_trade_no',$out_trade_no);
            //$this->assign('code_url',$code_url);
            //$this->assign('unifiedOrderResult',$unifiedOrderResult);
            $data['out_trade_no'] = $out_trade_no;
            $data['result'] = $unifiedOrderResult;
            return $data;
    //        $this->display("Home@WxPay:native_pays");//扫码模板
    //        exit;
        }

    然后在IndexController 写一个调用微信支付的方法

    /*微信支付*/
        public function wxpay(){
            $openid = "ovOFkwccfw7PsERjKyhrZyDGm1-4";//"ovOFkwXd1PPolPDSH9ILyFMlRdF8";
            $amount = 1;
            $pay = A("Home/WxPay");
            $res = $pay->jsapi($openid,$amount);
            print_r($res['jsApiParameters']);
            $this->assign("jsApiParameters",$res['jsApiParameters']);
            $this->display("");
        }

    这样就完成thinkphp接入微信支付了,手机访问:域名/index.php/Home/Index/wxpay ,测试截图:

    在前面我们已经payment文件夹的ThinkPHP/Library/Vendor/Payment/WxPay/WxPayPubHelper/WxPayPubHelper.php 包含了 企业付款类

    直接在IndexController 写一个调用企业付款的方法,看到吧,封装好后,调用就是这么简单

    /*企业付款*/
        function merchpay(){
            header("Content-type: text/html; charset=utf-8");
            Vendor('Payment.WxPay.WxPayPubHelper.WxPayPubHelper');
            $obj = new VendorPaymentWxPayWxPayPubHelperMerchPay();
            $openid = 'ovOFkwXd1PPolPDSH9ILyFMlRdF8';
            $trade_no = date('YmdHis').mt_rand(1000,9999);
            $res = $obj->pay($openid,$trade_no,1,'提现');
            print_r($res);
            return $res;
        }

    手机打开测试截图:

      

     这样就完成了thinkphp接入微信支付、微信企业付款。

    新增了接入微信扫码支付和整理了接入教程,这样电脑也可以使用微信扫码支付了!

    需要完整代码和教程的 可以加 851 488 243(备注:TP微信支付)

    
    
    
  • 相关阅读:
    64位机配置iis 运行asp.net 程序(转载)
    病狗问题
    如何配置sqlcachedependence
    操作应用程序池
    自定义事件
    以下事情没做好决不能给客户演示
    判断用户ip是否在指定的ip段内
    silverlight4学习中解决的问题
    日历JS代码
    自己写的代码生成器ltscode2.0
  • 原文地址:https://www.cnblogs.com/memor-y/p/7348374.html
Copyright © 2020-2023  润新知