支付demo1

<?php
namespace App\Http\Controllers\FrontEnd;

use App\Http\Controllers\Controller;
//use App\Http\Requests\Request;
use App\Models\MDebitLog;
use App\Models\MLog;
use App\Models\MUser;
use App\Models\MWallet;
use App\Models\MWithdrawLog;
use App\Utils\alipaysdk\aop\AopClient;
use App\Utils\alipaysdk\aop\request\AlipayTradeWapPayRequest;
use Illuminate\Http\Request;

class PayController extends Controller{

    //支付宝
    public static $GATEWAY_URL = "https://openapi.alipay.com/gateway.do";  //网关
    public static $APP_ID = "2018101861687684";
    public static $RSA_PRIVATE_KEY = 'MSSSIIEpAIBAAKCAQEAsEH/DTTWjryQhRV3FybaHodZuMWActjPWswkaviaHkXhHjBiMm+Pi4LSxidH572XXIYP8nXx1DKi7LrGFYatftLJzKyjjX379Pkzf+a0CNtNo7pIbiGDQeN0qT0Hll32V1JlzkoZPthqQRN6P6tSqqf0xjXs+yzv/oCAqZeoMEPumy/sOu1Sd2x5KL7mBrvZ7PC8+o+48KrpfLb2Vv8mNvQAxcnzFPJA8rPaTxhem83cccdazULnrdx6okoJnDlJGul7HdG27GavQH90tSdpkeUYSUOzVsBkNuOUfHqu6A/VXREmNuPoN7GKsv/mbpP4HQ130WEQTWRbVv7kr5IgBwIDAQABAoIBAD+P7TyD+4QJ+EwmC4Zr2mj8Ap0hjEreaRijWdbBxEJ6jM5oQGFT3f4/tWcEL2gg9P7G0eVsJ0OQ5zRbvqdwpAyCU4feEjUqY7xaSfor5mzzOTJ8MTaWG1Gdhyqo+Z1+USH4cwJLsoL5ZIgHUCS50dv9KcZ5F/cUo4+yI7QFHwAYRhgHhaAZFW8jk0ZCFzwKDZxUSIkFiAW6Jp2pApDW9lg4f6pLIA2wA6Lvnx7umIVjEpIrAfzCqIEElGUswyvQbuwDxf0+rn9+uyel2yxYdyHJIcWfLDsXUe/n47fLvOXCr3O+VAc/Jji3QD1DAMnIu2adys/vG5pERXqxE1r8EoECgYEA3LHdZGtryo+TMjtiZZbrIE6nhlEwsiUJm4ULVZcqu0iV6t+y5aJXCwVhRJdGTLVjk/El4oC/24KFSNmBFBSXTXJaQ6pWdCQDGOUcmmkqQ7EGqJw1EYojL2zBP4/cNQ68YCJSOEgIoppX+VAmxXmpr3TDzYMyn7VR4c3nWCxM4ucCgYEAzHRMmTBg3fkgHObCwogFeuBGWDRdY/UXsWfqBFbJncjhU1QW+9kTK38bD2WnOZwc8bnT1hrwOAq0DSzhZFrmx2whv/b5EJYHfOXklncwsQsWrhS6uueXG4nAX16ejhwkMj2bmTBxBGiKGx5P+awAFhnxvQwmu4kamfSlchUYVeECgYEAzAW6L92G1soIQAXaHyR31XQhNvDT3byTtyw1oDiRjnW58lo/Hj8HzO56T1ix6rQ9jEUAyvZPZ3SwFvrMc23dugEfJTLRnai1HEyiNrVGFzIOf8142fAkOvGFbWdnIb2vtAfGjrU5FmktLxRD44dnsQZ3BQRmxnJvchpR5pd9tL0CgYEAyvD1x2j5/dt3QLjdwXJ63gkYSh1QRhPWPMZEx6HN5syqvKfPWJWULayxE4t3ffuzz00BNJjwsPAO4LUX1SFVycVPith/STNio1selywgLNww2wLAhx2yJCeLyB6Hi8/rLeNxO5GV3SZXT6u6/rz4KPf/uAMDv0rMGN16C89cpIECgYAY/zZr1ZMntxFDIV9XeE+v6Cm8MqJ6w9/YpqlsxmDVzDpdWL9aXyov2EA//1uPHXL5GdgkRKY0fS2OFrhl+8uhvGDMzvc4hLE0JKS4w7/a5mI4xuIGLYNgPQp/qG22JHsUz1H8B+322WM1H2cs4j166PnZcv6ZPpi7KnXp2rPwzA==';    public static $API_VERSION = '1.0';
    public static $SIGN_TYPE = 'RSA2';
    public static $POST_CHARSET = 'utf-8';
    public static $FORMAT = 'json';
//    public static $ALIPAY_RSA_PUBLIC_KEY = 'MSSSSIIEpAIBAAKCAQEAsEH/DTTWjryQhRV3FybaHodZuMWActjPWswkaviaHkXhHjBiMm+Pi4LSxidH572XXIYP8nXx1DKi7LrGFYatftLJzKyjjX379Pkzf+a0CNtNo7pIbiGDQeN0qT0Hll32V1JlzkoZPthqQRN6P6tSqqf0xjXs+yzv/oCAqZeoMEPumy/sOu1Sd2x5KL7mBrvZ7PC8+o+48KrpfLb2Vv8mNvQAxcnzFPJA8rPaTxhem83cccdazULnrdx6okoJnDlJGul7HdG27GavQH90tSdpkeUYSUOzVsBkNuOUfHqu6A/VXREmNuPoN7GKsv/mbpP4HQ130WEQTWRbVv7kr5IgBwIDAQABAoIBAD+P7TyD+4QJ+EwmC4Zr2mj8Ap0hjEreaRijWdbBxEJ6jM5oQGFT3f4/tWcEL2gg9P7G0eVsJ0OQ5zRbvqdwpAyCU4feEjUqY7xaSfor5mzzOTJ8MTaWG1Gdhyqo+Z1+USH4cwJLsoL5ZIgHUCS50dv9KcZ5F/cUo4+yI7QFHwAYRhgHhaAZFW8jk0ZCFzwKDZxUSIkFiAW6Jp2pApDW9lg4f6pLIA2wA6Lvnx7umIVjEpIrAfzCqIEElGUswyvQbuwDxf0+rn9+uyel2yxYdyHJIcWfLDsXUe/n47fLvOXCr3O+VAc/Jji3QD1DAMnIu2adys/vG5pERXqxE1r8EoECgYEA3LHdZGtryo+TMjtiZZbrIE6nhlEwsiUJm4ULVZcqu0iV6t+y5aJXCwVhRJdGTLVjk/El4oC/24KFSNmBFBSXTXJaQ6pWdCQDGOUcmmkqQ7EGqJw1EYojL2zBP4/cNQ68YCJSOEgIoppX+VAmxXmpr3TDzYMyn7VR4c3nWCxM4ucCgYEAzHRMmTBg3fkgHObCwogFeuBGWDRdY/UXsWfqBFbJncjhU1QW+9kTK38bD2WnOZwc8bnT1hrwOAq0DSzhZFrmx2whv/b5EJYHfOXklncwsQsWrhS6uueXG4nAX16ejhwkMj2bmTBxBGiKGx5P+awAFhnxvQwmu4kamfSlchUYVeECgYEAzAW6L92G1soIQAXaHyR31XQhNvDT3byTtyw1oDiRjnW58lo/Hj8HzO56T1ix6rQ9jEUAyvZPZ3SwFvrMc23dugEfJTLRnai1HEyiNrVGFzIOf8142fAkOvGFbWdnIb2vtAfGjrU5FmktLxRD44dnsQZ3BQRmxnJvchpR5pd9tL0CgYEAyvD1x2j5/dt3QLjdwXJ63gkYSh1QRhPWPMZEx6HN5syqvKfPWJWULayxE4t3ffuzz00BNJjwsPAO4LUX1SFVycVPith/STNio1selywgLNww2wLAhx2yJCeLyB6Hi8/rLeNxO5GV3SZXT6u6/rz4KPf/uAMDv0rMGN16C89cpIECgYAY/zZr1ZMntxFDIV9XeE+v6Cm8MqJ6w9/YpqlsxmDVzDpdWL9aXyov2EA//1uPHXL5GdgkRKY0fS2OFrhl+8uhvGDMzvc4hLE0JKS4w7/a5mI4xuIGLYNgPQp/qG22JHsUz1H8B+322WM1H2cs4j166PnZcv6ZPpi7KnXp2rPwzA==';
    public static $ALIPAY_RSA_PUBLIC_KEY  ='MSSSIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjHqgY7To6AirhsUrBb8IihWUiciaAHQUksM02KCzuIxu4F8ZMLEE7fDvWYQrpJhasyoLDR6Q0FoU7TCFFvTDaSmdiziLThEKm0weQTARNzF5bwVVC4b6XIyuHIqje3O4Jr4bAbINVeZhh0yjmZxHV0ucqDqie9Re3vcffmR+CwkSIDhBkJoVHdgMjA3U4PdKWAu87Gke02FpSIIp2rHv0Xj5u7OteCzl068Zr7ERhSRbeNjVAQMxeo8Slk0LEZW6SWs9fh1j9DeiQDtgoo/eae8zoIxFsGR6/noghk+wVQajOQQrgYKcsR3LCGzVRnIXoBqbfG7MqxicUE/1xgyoKQIDAQAB';
    //微信
    public static $WX_APP_ID = "****"; //微信公众号APPid
    public static $WX_MCH_ID = "******";        //微信商家账号
    public static $WX_SECRET_KEY ="*******";
    //public static $WX_

    /**
     * 支付宝手机端在线支付
     */

    public function test(){

    }
//    public function aliPay($money,$no,$subject,$body){
    public function aliPay(){
        //构造参数
        $aop = new AopClient();
        //或者
        //引入sdk
        require_once "pay/alipaysdk/AopSdk.php";
        $aop = new \AopClient();

        $aop->gatewayUrl = self::$GATEWAY_URL;
        $aop->appId = self::$APP_ID;
        $aop->rsaPrivateKey = self::$RSA_PRIVATE_KEY;
        $aop->apiVersion = self::$API_VERSION;
        $aop->signType = self::$SIGN_TYPE;
        $aop->postCharset= self::$POST_CHARSET;
        $aop->format= self::$FORMAT;
        $aop->alipayrsaPublicKey = self::$ALIPAY_RSA_PUBLIC_KEY;
        $request = new AlipayTradeWapPayRequest();
        //或者
        $request = new \AlipayTradePagePayRequest();

        $request->setReturnUrl(route('web.alipay.return'));
        $request->setNotifyUrl(route('web.alipay.notify'));

        $money =0.01;
        $no=time().rand(1,100);
        $subject ="666";
        $body = '2220';

        $request->setBizContent(
            "{"."\"product_code\":\"QUICK_WAP_WAY\",".
            "\"out_trade_no\":\"$no\",".
            "\"subject\":\"$subject\",".
            "\"total_amount\":\"$money\",".
            "\"body\":\"$body\",".
            "\"timeout_express\":\"1m\"".
            "}"
        );
        //请求
        $result = $aop->pageExecute ($request);
//        输出
        echo $result;
    }
    //支付宝同步通知
    public function aliReturn(){
        $aop = new AopClient();
        //或者  -- 引入sdk

        require_once "pay/alipaysdk/AopSdk.php";

        $aop->alipayrsaPublicKey = self::$ALIPAY_RSA_PUBLIC_KEY;
        //此处验签方式必须与下单时的签名方式一致
        $flag = $aop->rsaCheckV1($_GET, NULL, "RSA2");
        //验签通过后再实现业务逻辑,比如修改订单表中的支付状态。
        if ($flag){
            //跳转支付成功页面
            MLog::log("会员充值成功!");
            echo '充值成功';
            return redirect()->route('login.page');
        }else{
            //跳转支付失败页面
            echo '充值失败';
            return redirect()->route('login.page');
        }
    }
    //支付宝异步通知
    public function aliNotify(){
        $aop = new AopClient();
        $aop->alipayrsaPublicKey = self::$ALIPAY_RSA_PUBLIC_KEY;
        //此处验签方式必须与下单时的签名方式一致
        $flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
        //验签通过后再实现业务逻辑,比如修改订单表中的支付状态。
        /**
         * ①验签通过后核实如下参数out_trade_no、total_amount、seller_id
         * ②修改订单表
         **/
        //打印success,应答支付宝。必须保证本界面无错误。只打印了success,否则支付宝将重复请求回调地址。
        //echo 'success';
        if ($flag){
            //交易状态
            MLog::log("管理员充值成功!");
            echo 'success';
        }else{

            echo "fail";
        }
    }

    /**
     * 第三方微信支付
     * $no      订单号
     * $money   订单金额
     * $title   订单标题
     * $info    订单详情
     */
    public function wechatPay($no, $money, $title, $info){
//引入sdk
        require_once "pay/Wxpay/example/WxPay.Api.php";
        $notify = new \NativePay();
        $input = new \WxPayUnifiedOrder();
        $input->SetBody("test");//商品描述
        $input->SetAttach("test");//附加数据
        $input->SetOut_trade_no('123456789');//订单号唯一
        $input->SetTotal_fee("1");//商品价格
        $input->SetTime_start(date("YmdHis"));//开始时间
        $input->SetTime_expire(date("YmdHis", time() + 600)); //交易结束时间
        $input->SetNotify_url(route('web.wxpay.notify'));//通知地址
        $input->SetTrade_type("NATIVE");//交易类型
        $input->SetProduct_id("123456789");//商品id
        $result = $notify->GetPayUrl($input);
        $url = $result["code_url"];
        return "http://paysdk.weixin.qq.com/example/qrcode.php?data=" . $url;
    }
    //回调函数
    public function wxNotify() {
        require_once "pay/Wxpay/example/WxPay.Api.php";
        //file_put_contents("/tmp/wechat.log",$GLOBALS['HTTP_RAW_POST_DATA']);
        try{
            $notify = new \NativeNotifyCallBack();
            $notify->Handle(true);

        }catch(\Exception $e){
            throw $e;
        }
    }

    /**
     * 微信h5在线支付
     * $openid 用户的openid
     */
//    public function wechatPay($money,$no){
    public function wechatPayH5(Request $request){
        header('content-type:text/html;charset=utf-8');
        $data['appid']= self::$WX_APP_ID;//商户的应用appid
        $data['mch_id']=self::$WX_MCH_ID;//商户ID
        $data['nonce_str']=$this->unicode();//unicode();//
        $data['body'] = "智能名片充值系统";
        $money = 1; $no="dfasjsdooijdvoj123".time();
        $data['out_trade_no']="$no";//.time();//商户订单号
        $data['total_fee'] = $money;//订单金额
        $data['spbill_create_ip'] = $this->get_client_ip();//终端ip
        $data['notify_url'] = route('web.wxpay.notify');//通知地址
        $data['trade_type'] = 'MWEB';//交易类型
        //$wap_url = 'http://'.$_SERVER['HTTP_HOST'];
//        $data['scene_info'] = '{"h5_info": {"type":"Wap","wap_url": "http://nizuishuai.iok.la","wap_name": "全民环保租车充值"}}';//场景信息
        $data['scene_info'] = '{"h5_info": {"type":"Wap","wap_url": "http://yunhuijuke.com","wap_name": "智能名片充值系统"}}';//场景信息

        $sign = $this->getSign($data);
        $data['sign']= $sign;
        $xml=$this->arraytoxml($data);
        $url='https://api.mch.weixin.qq.com/pay/unifiedorder';
        $res=$this->curl($xml,$url);
        $result = $this->xmltoarray($res);
        if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
            $url = $result['mweb_url'];
            header("Location: $url");
            exit;
        } else{
            dump($result['return_msg']);
        }
    }
    /**
     * 微信通知
     */
    public function wxNotifyH5(){
        //get post data,May be due to the  different environments;
        $shuoming = $GLOBALS['HTTP_RAW_POST_DATA'];
        $post_data = json_decode(json_encode(simplexml_load_string($GLOBALS['HTTP_RAW_POST_DATA'], 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        //验签
        if ($this->checkSign($post_data)){
            //验签成功
            $array_data['out_trade_no'] = $post_data['out_trade_no'];//商户订单号
            $array_data['total_fee'] = $post_data['total_fee'];//订单金额
            $array_data['trade_state'] = $post_data['result_code'];//订单状态
            $array_data['transaction_id'] = $post_data['transaction_id'];//微信支付订单号
            //验证交易状态成功
            if ($array_data['trade_state'] == "SUCCESS"){
                //验证订单状态金额是否正确
                $debit = MDebitLog::where('no',$array_data['out_trade_no'])->first();
                if ($debit->statu==1 && $debit->money == $array_data['total_fee']/100){
                    //修改充值记录为已完成,增加用户现金币余额
                    $wallet = MWallet::where('uid',$debit->uid)->first();
                    $wallet->w1 += $debit->money;
                    $debit->statu = 2;
                    if ($wallet->save() && $debit->save()){
                        return true;
                    }
                }
            }
            echo 'success';
        }else{
            //验签失败
            echo 'fail';
        }
    }
    function unicode() {
        $str = uniqid(mt_rand(),1);
        $str=sha1($str);
        return md5($str);
    }
    function arraytoxml($data){
        $str='<xml>';
        foreach($data as $k=>$v) {
            $str.='<'.$k.'>'.$v.'</'.$k.'>';
        }
        $str.='</xml>';
        return $str;
    }
    function xmltoarray($xml) {

        libxml_disable_entity_loader(true);//禁止引用外部xml实体
        $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
        $val = json_decode(json_encode($xmlstring),true);
        return $val;
    }
    function curl($param="",$url) {

        $postUrl = $url;
        $curlPost = $param;
        $ch = curl_init();                                      //初始化curl
        curl_setopt($ch, CURLOPT_URL,$postUrl);                 //抓取指定网页
        curl_setopt($ch, CURLOPT_HEADER, 0);                    //设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            //要求结果为字符串且输出到屏幕上

        curl_setopt($ch, CURLOPT_POST, 1);                      //post提交方式

        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);             // 增加 HTTP Header(头)里的字段 ---请求url中的参数
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);        // 终止从服务端进行验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        $data = curl_exec($ch);                                 //运行curl
        //返回结果
        if($data){
            curl_close($ch);
            return $data;
        }
        else {
            $error = curl_errno($ch);
            echo "curl出错,错误码:$error"."<br>";
            curl_close($ch);
            return false;
        }
    }
    /**
     * 获取终端ip
     */
    public function get_client_ip(){
        $ip = '';
        if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        }elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        }else{
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        $ip_arr = explode(',', $ip);
        return $ip_arr[0];
    }

    /**
     * 获取签名
     */
    public function getSign($data){
        $secrect_key=self::$WX_SECRET_KEY;//
        $data=array_filter($data);
        ksort($data);
        $str='';
        foreach($data as $k=>$v) {
            $str.=$k.'='.$v.'&';
        }
        $str.='key='.$secrect_key;

        //进行签名
        return md5($str);
    }

    /**
     * 验签
     */
    public function checkSign($data)
    {
        $tmpData = $data;
        unset($tmpData['sign']);
        $sign = $this->getSign($tmpData);//本地签名
        if ($data['sign'] == $sign) {
            return TRUE;
        }
        return FALSE;
    }


    //QQ登录
    public function QQlogin(Request $request) {
        //验证是否是QQ登录
        $code  =$request ->code;
        if (!empty($code)) {
            $url = "https://graph.qq.com/oauth2.0/token";
            $param['grant_type'] = 'authorization_code';
            $param['client_id'] = "101513947";
            $param['client_secret'] = "426d860fea56390ee64293631ba90fe1";
            $param['code'] = $code;
            $param['redirect_uri']= "http://www.hnyhj.net/login";
            $param = http_build_query($param);
            $res = $this ->QQ_curl($param,$url);
//            此处得到 access_token
            $mm="access_token=B4DDFA6593CF6C6130708961B83C9E4F&expires_in=7776000&refresh_token=B2FCB0302D06D9CCD97FBA3DA7FA9FCE";


            https://graph.qq.com/user/get_user_info?access_token=B4DDFA6593CF6C6130708961B83C9E4F&oauth_consumer_key=101513947&openid=92ACC880BD4EAAA61A7244137ED2E31A
            return $res;
        }

    }
    /**
     * @param string $param 为 字符串  json_encode()后的 参数
     * @param $url
     * @return bool|mixed
     */
    function QQ_curl($param="", $url)
    {
        $postUrl = $url;
        $curlPost = $param;
        $ch = curl_init();                                      //初始化curl
        curl_setopt($ch, CURLOPT_URL, $postUrl);                 //抓取指定网页
        curl_setopt($ch, CURLOPT_HEADER, 0);                    //设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            //要求结果为字符串且输出到屏幕上

//        curl_setopt($ch, CURLOPT_POST, 1);                      //post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);             // 增加 HTTP Header(头)里的字段 ---请求url中的参数
//    改为get 取掉   curl_setopt($ch, CURLOPT_POST, 1);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);        // 终止从服务端进行验证 ssl协议
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        $data = curl_exec($ch);                                 //运行curl
        //返回结果
        if ($data) {
            curl_close($ch);
            return $data;
        } else {
            $error = curl_errno($ch);
            echo "curl出错,错误码:$error" . "<br>";
            curl_close($ch);
            return false;
        }

    }


    /**
     * 支付宝提现
     */
    public function alipayTx($money,$no, $ali_no, $ali_name){
        //引入sdk
        require_once "pay/alipaysdk/AopSdk.php";
        $aop = new \AopClient ();
        $aop->gatewayUrl = self::$GATEWAY_URL;
        $aop->appId = self::$APP_ID;
        $aop->rsaPrivateKey = self::$RSA_PRIVATE_KEY;
        $aop->alipayrsaPublicKey= self::$ALIPAY_RSA_PUBLIC_KEY;
        $aop->apiVersion = self::$API_VERSION;
        $aop->signType = self::$SIGN_TYPE;
        $aop->postCharset= self::$POST_CHARSET;
        $aop->format= self::$FORMAT;
        $request = new \AlipayFundTransToaccountTransferRequest ();

        $request->setBizContent("{" .
            "\"out_biz_no\":\"$no\"," .
            "\"payee_type\":\"ALIPAY_LOGONID\"," .
            "\"payee_account\":\"$ali_no\"," .
            "\"amount\":\"$money\"," .
            "\"payer_show_name\":\"弘商城提现\"," .
            "\"payee_real_name\":\"$ali_name\"," .
            "\"remark\":\"弘商城支付宝提现\"" .
            "  }");
        $result = $aop->execute( $request);
        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode = $result->$responseNode->code;
        $out_no = $result->$responseNode->out_biz_no;
        if(!empty($resultCode)&&$resultCode == 10000){
            //处理逻辑

            $this->data = true;
        } else {
            $this->data = false;
        }
        return $this->data;
    }

    /**
     * 微信提现
     */
    public function wechatTx($openid,$money,$realname,$no){
        header('content-type:text/html;charset=utf-8');
        $data['mch_appid']= self::$WX_APP_ID;//商户的应用appid
        $data['mchid']= self::$WX_MCH_ID;//商户ID
        $data['nonce_str']=$this->unicode();//unicode();//
        $data['partner_trade_no']="$no";//.time();//
        $data['openid']=$openid;//
        $data['check_name']='NO_CHECK';//
        $data['re_user_name']=$realname;//
        $data['amount']=floatval($money*100);//
        $data['desc']='用户提现';//
        $data['spbill_create_ip']=$_SERVER['SERVER_ADDR'];//
        $secrect_key= self::$WX_SECRET_KEY;///
        $data=array_filter($data);
        ksort($data);
        $str='';
        foreach($data as $k=>$v) {
            $str.=$k.'='.$v.'&';
        }
        $str.='key='.$secrect_key;
        $data['sign']=md5($str);
        $xml=$this->arraytoxml($data);
        $url= self::$WX_URL;
        $res=$this->pem_curl($xml,$url);
        $return = $this->xmltoarray($res);
        if ($return['return_code'] == 'SUCCESS' && $return['result_code'] == 'SUCCESS'){
            //处理逻辑
            return true;
        }else{
            return false;
        }
    }
    //需要证书的curl
    function pem_curl($param="",$url) {
        $postUrl = $url;
        $curlPost = $param;
        $ch = curl_init();                                      //初始化curl
        curl_setopt($ch, CURLOPT_URL,$postUrl);                 //抓取指定网页
        curl_setopt($ch, CURLOPT_HEADER, 0);                    //设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_POST, 1);                      //post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);           // 增加 HTTP Header(头)里的字段
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);        // 终止从服务端进行验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch,CURLOPT_SSLCERT,app_path().'/Utils/Wxpay/apiclient_cert.pem'); //这个是证书的位置
        curl_setopt($ch,CURLOPT_SSLKEY,app_path().'/Utils/Wxpay/apiclient_key.pem'); //这个也是证书的位置
        $data = curl_exec($ch);                                 //运行curl
        //返回结果
        if($data){
            curl_close($ch);
            return $data;
        }
        else {
            $error = curl_errno($ch);
            echo "curl出错,错误码:$error"."<br>";
            curl_close($ch);
            return false;
        }
    }
}

  

猜你喜欢

转载自www.cnblogs.com/liyanxi/p/12059372.html