thinkphp集成微信扫码支付

-回复 -浏览
楼主 2019-01-10 14:10:03
举报 只看此人 收藏本贴 楼主
1.下载微信扫码支付sdk ,将sdk上传至项目的extend目录下,将文件夹重命名为wxpay

2.新建一个Wxpay.php控制器,内容如下
<?php
namespace app\admin\controller;
use think\Controller;
use wxpay\database\WxPayResults;
use wxpay\database\WxPayUnifiedOrder;
use wxpay\NativePay;
use wxpay\WxPayApi;
use wxpay\WxPayConfig;
use think\Db;
use think\Session;
use think\Request;
use think\Validate;
class Wxpay extends Controller{
    public function index(){

         $data=Request::instance()->param();
        $tradeno=randomkeys(32);  //生成一个订单  最多32位

        $data['tradeno']=$tradeno;

        $data['start_time']=time();

        $data['end_time']=strtotime(date("Y",time())+'1'.date("-m-d H:i:s"));
        $data['return_code']="false";

        $notify = new NativePay();
        $input = new WxPayUnifiedOrder();
        $input->setBody("这里随便写");
        $input->setAttach("附加数据");  //附加数据 

        $input->setOutTradeNo($tradeno);  //商户订单号  唯一

        $input->setTotalFee($data['price']*100); //以分为单位
        //$input->setTotalFee(1); //以分为单位
        $input->setTimeStart(date("YmdHis"));
        $input->setTimeExpire(date("YmdHis", time() + 600));
        $input->setGoodsTag("test");

        $input->setNotifyUrl(WxPayConfig::NOTIFY_URL);
        $input->setTradeType("NATIVE");  //设置扫码支付
        //$product_id 为商品自定义id 可用作订单ID
        $input->setProductId($data['goodsid']);   //商品的id
        $result = $notify->getPayUrl($input);
        if (empty($result['code_url'])){
            $qrCode_url = '';
        }else{
            $qrCode_url = $result["code_url"];
            $imgs="http://qr.liantu.com/api.php?text=".$qrCode_url;
        }

        return $this->fetch('index',['imgs'=>$imgs]);
        }

        /**
     * 微信支付 回调逻辑处理
     * @return string
     */
        public function notify(){
        //生成消息反馈


        $wxData = file_get_contents("php://input");
        try{
            $resultObj = new WxPayResults();
            $wxData = $resultObj->Init($wxData);
        }catch (\Exception $e){
            $resultObj ->setData('return_code','FAIL');
            $resultObj ->setData('return_msg',$e->getMessage());
            return $resultObj->toXml();
        }

        if ($wxData['return_code']==='FAIL'||
            $wxData['return_code']!== 'SUCCESS'){
            $resultObj ->setData('return_code','FAIL');
            $resultObj ->setData('return_msg','error');
            return $resultObj->toXml();
        }
        //TODO 根据订单号 out_trade_no 来查询订单数据
        $out_trade_no = $wxData['out_trade_no'];

        $order=db::name("order")->where("tradeno='$out_trade_no'")->find();

        if($order && $order['return_code']=='false'){
            db::name('order')->where("tradeno='$out_trade_no'")->update(['return_code'=>'true']);
            return $resultObj->toXml();
        }
    }
}


我要推荐
转发到