liyanxi

支付demo1

2019-12-18 13:24  ly772186472  阅读(335)  评论(0编辑  收藏  举报
<?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;
        }
    }
}

  

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-09-13
猜你喜欢
  • 2022-12-23
  • 2021-11-17
  • 2021-08-06
  • 2022-12-23
  • 2021-09-13
  • 2021-08-08
  • 2022-12-23
相关资源
相似解决方案