php微信h 5支払い、親測利用可能、非微信ブラウザ

6712 ワード

コードを貼った
 public function pay(){
        header("Content-type:text/html;charset=utf-8");
        $out_trade_no = I('get.out_trade_no'); //   、         。
        $sign = I('get.sign');
        $check_sign = sha1($out_trade_no);
        if($sign !== $check_sign){
            echo "alert('     ');history.go(-1);";
            return false;
        }
        $list=  M('juankuan')->where(array('number'=>$out_trade_no))->find();
        if(!$list) $this->jsonReturn(0,'     ','');
        $url='https://api.mch.weixin.qq.com/pay/unifiedorder';  //    
        $appid='';//   appid
        $appsecret='';
        $mch_id='';//    id
        $nonce_str='qyzf'.rand(1, 999999);//   
        //$out_trade_no= 'dbjz'.date('Ymd').'_'.$id.'_'.substr(time(),4).rand(1,10000);
        $ip=$this->getClientIp();
        $scene_info='{"h5_info": {"type":"Wap","app_name": "project info","package_name": "wap      "}}';

        $total_fee=$list['money'] * 100;      //   *100
        $trade_type='MWEB';
        $attach='    ';
        $body='      ';
        $notify_url='notify'; //    
        $arr=array(
            'appid'=>$appid,
            'mch_id'=>$mch_id,
            'nonce_str'=>$nonce_str,
            'out_trade_no'=>$out_trade_no,
            'spbill_create_ip'=>$ip,
            'scene_info'=>$scene_info,
//            'openid'=>$openid,
            'total_fee'=>$total_fee,
            'trade_type'=>$trade_type,
            'attach'=>$attach,
            'body'=>$body,
            'notify_url'=>$notify_url
        );
        $sign=$this->getSign($arr);
        //'.$openid.'
        $data='
                 '.$appid.'
                 '.$attach.'
                 '.$body.'
                 '.$mch_id.'
                 '.$nonce_str.'
                 '.$notify_url.'
                 '.$out_trade_no.'
                 '.$ip.'
                 '.$total_fee.'
                 '.$trade_type.'
                 '.$scene_info.'
                 '.$sign.'
                 ';
        $result=$this->https_request($url,$data);
//        echo '====================';
//        var_dump($result);
//        echo '*******************';
        //      xml  
        libxml_disable_entity_loader(true);
        $result_info = json_decode(json_encode(simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        //  print_r($result_info);
        $this->assign('result_info',$result_info);//$result_info['mweb_url'];//       ,      
        $this->assign('list',$list);
        $this->display();
    }

 
 
/**
 * h5        
 */
public function notify()
{

    $str_Post = $GLOBALS["HTTP_RAW_POST_DATA"];
    libxml_disable_entity_loader(true);
    $postObj = simplexml_load_string($str_Post, 'SimpleXMLElement', LIBXML_NOCDATA);
    $postObj = json_encode($postObj);
    $postObj = json_decode($postObj, true);
    $out_trade_no = trim($postObj["out_trade_no"]);
    if ($postObj["result_code"] == 'SUCCESS' && $postObj["return_code"] == 'SUCCESS') {
      //                    。
    }
}

//curlリクエスト
public function https_request($url, $data) {

        $curl = curl_init(); //     CURL  
        curl_setopt($curl, CURLOPT_URL, $url); //       
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); //           
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); //       SSL        
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //       
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); //     Referer
        curl_setopt($curl, CURLOPT_POST, 1); //        Post  
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post      
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); //            
        curl_setopt($curl, CURLOPT_HEADER, 0); //      Header    
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //               
        $res = curl_exec($curl);
        curl_close($curl);

        return $res;
    }

    /**
     * @return   ip
     */
    private function getClientIp()
    {
        $cip='unknown';
        if ($_SERVER['REMOTE_ADDR']){
            $cip=$_SERVER['REMOTE_ADDR'];
        }elseif (getenv($_SERVER['REMOTE_ADDR'])){
            $cip=getenv($_SERVER['REMOTE_ADDR']);
        }
        return $cip;
    }




    /**
     *       :    
     */
    public function getSign($Obj)
    {
        foreach ($Obj as $k => $v)
        {
            $Parameters[$k] = $v;
        }
        //     :        
        ksort($Parameters);
        $String = $this->formatBizQueryParaMap($Parameters, false);
        //echo '【string1】'.$String.'';
        //     : string   KEY   5a02bd8ecxxxxxxxxxxxxc1aae7d199                           
        $String = $String."&key=zgdbjz1234567890weixin1234567890";
        //echo "【string2】".$String."";
        //     :MD5  
        $String = md5($String);
        //echo "【string3】 ".$String."";
        //     :        
        $result_ = strtoupper($String);
        //echo "【result】 ".$result_."";
        return $result_;
    }



    public function formatBizQueryParaMap($paraMap, $urlencode)
    {
//        var_dump($paraMap);//die;
        $buff = "";
        ksort($paraMap);
        foreach ($paraMap as $k => $v)
        {
            if($urlencode)
            {
                $v = urlencode($v);
            }
            //$buff .= strtolower($k) . "=" . $v . "&";
            $buff .= $k . "=" . $v . "&";
        }
        $reqPar='';
        if (strlen($buff) > 0)
        {
            $reqPar = substr($buff, 0, strlen($buff)-1);
        }
        return $reqPar;
    }