久久久国产精品亚洲人小说-伊人久久精品无码二区麻豆-在线视频日韩精品第二页-国产成人AV乱码在线观看-在线免费看影视网站-亚洲国产成人精品一二区-久久精品午夜福利

010-63307995
在線客服
電話聯系
微信咨詢
建站技術
成立11周年,感恩回饋新老客戶鉅惠活動進行中……
文章資訊ARTICLE
公司新聞
建站指南
行業新聞
營銷分享
網站建設資訊
最新簽約

TP5微信支付

來源:本站 最后更新:2023-02-08 16:50:06 作者:佚名 瀏覽:1229次

北京網站建設、北京網站建設公司、北京網站制作、教育類網站建設、北京做網站、北京做網站公司

TP5微信支付

public function pay($openid,$fee,$test)
    {
        //參數定義
        $appid='APPID';
        $appsecret='秘鑰';
        $mch_id=‘商戶號’;
        $notify_url='異步回調地址';
         
        //獲取openid
        /*if(I("post.userid"))
        { 
            $infos=M('weixin_users')->find(I("post.userid"));
            $openid = $infos->openid;
        }*/
        $openid=$openid;
         
        //支付相關設置
        //$fee = I("post.total_fee");
        $fee = $fee;//舉例支付0.01
        $body =$test;
        $nonce_str=$this->nonce_str();//隨機字符串
  
        $out_trade_no = $this->order_number($openid);//商戶訂單號
        $spbill_create_ip = '120.27.20.3';//服務器的ip【自己填寫】;
        $total_fee =$fee*100;// 微信支付單位是分,所以這里需要*100
        $trade_type = 'JSAPI';//交易類型 默認
     
     
        //這里是按照順序的 因為下面的簽名是按照順序 排序錯誤 肯定出錯
        $post['appid'] = $appid;
        $post['body'] = $body;
        $post['mch_id'] = $mch_id;
        $post['nonce_str'] = $nonce_str;//隨機字符串
        $post['notify_url'] = $notify_url;
        $post['openid'] = $openid;
        $post['out_trade_no'] = $out_trade_no;
        $post['spbill_create_ip'] = $spbill_create_ip;//終端的ip
        $post['total_fee'] = $total_fee;//總金額
        $post['trade_type'] = $trade_type;
         
         
        //插入微信支付表
        // $pay=M('weixin_pay');
        // $count=$pay->where("out_trade_no='".$out_trade_no."'")->count();
  
        $sign = $this->sign($post);//簽名
        // return $sign;
        // if($count==0)
        // {
        //     $data=array();
        //     $data['out_trade_no']=$out_trade_no;
        //     $data['status']=1;
        //     $data['create_time']=time();
        //     $data['sign']=$sign;
        //     $data['openid']=$openid;
        //     $data['total_fee']=$total_fee;
        //     $data['trade_type']=$trade_type;
        //     $data['notify_url']=$notify_url;
        //     $pay->add($data);
        // }
         
         
        $post_xml = '<xml>
         <appid>'.$appid.'</appid>
         <body>'.$body.'</body>
         <mch_id>'.$mch_id.'</mch_id>
         <nonce_str>'.$nonce_str.'</nonce_str>
         <notify_url>'.$notify_url.'</notify_url>
         <openid>'.$openid.'</openid>
         <out_trade_no>'.$out_trade_no.'</out_trade_no>
         <spbill_create_ip>'.$spbill_create_ip.'</spbill_create_ip>
         <total_fee>'.$total_fee.'</total_fee>
         <trade_type>'.$trade_type.'</trade_type>
         <sign>'.$sign.'</sign>
        </xml>';
     
    //var_dump($post_xml);
        //print_r($post_xml);die;
        //統一接口prepay_id
        $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
        $xml = $this->http_request($url,$post_xml);
     
     
     
        $array = $this->xml($xml);//全要大寫
  
     
        //print_r($array);
        if($array['RETURN_CODE'] == 'SUCCESS' && $array['RESULT_CODE'] == 'SUCCESS'){
            $time = time();
            $tmp=[];//臨時數組用于簽名
            $tmp['appId'] = $appid;
            $tmp['nonceStr'] = $nonce_str;
            $tmp['package'] = 'prepay_id='.$array['PREPAY_ID'];
            $tmp['signType'] = 'MD5';
            $tmp['timeStamp'] = "$time";
     
     
            $data['state'] = 200;
            $data['timeStamp'] = "$time";//時間戳
            $data['nonceStr'] = $nonce_str;//隨機字符串
            $data['signType'] = 'MD5';//簽名算法,暫支持 MD5
            $data['package'] = 'prepay_id='.$array['PREPAY_ID'];//統一下單接口返回的 prepay_id 參數值,提交格式如:prepay_id=*
            $data['paySign'] = $this->sign($tmp);//簽名,具體簽名方案參見微信公眾號支付幫助文檔;
            $data['out_trade_no'] = $out_trade_no;
     
     
        }else{
            $data['state'] = 0;
            $data['text'] = "錯誤";
            $data['RETURN_CODE'] = $array['RETURN_CODE'];
            $data['RETURN_MSG'] = $array['RETURN_MSG'];
        }
     
        return $data;
    }
  
 
 
    //隨機32位字符串
    public function nonce_str(){
        $result = '';
        $str = 'QWERTYUIOPASDFGHJKLZXVBNMqwertyuioplkjhgfdsamnbvcxz';
         
        for($i=0;$i<32;$i++){
             
            $result .= $str[rand(0,48)];
        }
        return $result;
    }
     
     
     
    //生成訂單號
    public function order_number($openid){
        //date('Ymd',time()).time().rand(10,99);//18位
        return md5($openid.time().rand(10,99));//32位
    }
     
     
     
    //簽名 $data要先排好順序
    public function sign($data){
        $stringA = '';
        foreach ($data as $key=>$value){
            if(!$value) continue;
            if($stringA) $stringA .= '&'.$key."=".$value;
            else $stringA = $key."=".$value;
        }
        //echo $stringA;
        $wx_key='';//申請支付后有給予一個商戶賬號和密碼,登陸后自己設置的key
        $stringSignTemp = $stringA.'&key='.$wx_key;
        return strtoupper(md5($stringSignTemp));
    }
     
     
    //curl請求
    public function http_request($url,$data = null,$headers=array())
    {
        $curl = curl_init();
        if( count($headers) >= 1 ){
            curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        }
        curl_setopt($curl, CURLOPT_URL, $url);
     
     
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
     
     
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
         
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
         
        return $output;
    }
     
     
    //獲取xml
    public function xml($xml){
        $p = xml_parser_create();
        xml_parse_into_struct($p, $xml, $vals, $index);
        xml_parser_free($p);
        $data = [];
        foreach ($index as $key=>$value) {
            if($key == 'xml' || $key == 'XML') continue;
                $tag = $vals[$value[0]]['tag'];
                $value = $vals[$value[0]]['value'];
                $data[$tag] = $value;
            }
        return $data;
    }
     
    public function wechatNotify()
    {
        //存儲微信的回調
        $xml = file_get_contents("php://input");
         
        $arr = $this -> XmlToArr($xml);
         
         
        $out_trade_no    = $arr['out_trade_no'];
        $openid=$arr['openid'];//openid
        $sign=$arr['sign'];//校驗碼
        $total_fee=$arr['total_fee'];//訂單金額
        $transaction_id=$arr['transaction_id'];//微信支付號
         
         
        // $pay=M('weixin_pay');
        // $count=$pay->where(array('out_trade_no'=>$out_trade_no))->count();
         
         
        $myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
        $txt = $out_trade_no."\n";
        fwrite($myfile, $txt);
        $txt = $openid."\n";
        fwrite($myfile, $txt);
        $txt='count:'.$count;
        fwrite($myfile, $txt);
        fclose($myfile);
         
         
        if($count==1)
        {
            $info=$pay->where(array('out_trade_no'=>$out_trade_no))->field('id,openid,total_fee')->find();
            if($info['openid']==$openid && $total_fee==$info['total_fee']) {
                //更新微信支付表
                $data=array();
                $data['update_time']=time();
                $data['status']=2;
                $data['transaction_id']=$transaction_id;
                $pay->where("openid='".$openid."' and out_trade_no='".$out_trade_no."'")->save($data);
          
            }
             
        }
        echo 'success';
    }
     
     
     
    public function XmlToArr($xml)
    {   
        if($xml == '') return '';
        libxml_disable_entity_loader(true);
        $arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);       
        return $arr;
    }

注:尊重原創。部分文章和圖片來于網絡,如未署名,系檢索無法確定原作者,版權歸原作者。原作者可隨時聯系我們予以署名更正或做刪除處理。
快速搜索
熱門標簽
推薦閱讀
友情鏈接/ Links