Heim > php教程 > php手册 > WeChat-App-Zahlung erfolgt mit CI-Framework

WeChat-App-Zahlung erfolgt mit CI-Framework

WBOY
Freigeben: 2016-09-03 00:00:41
Original
1206 Leute haben es durchsucht

/**
* Kombinieren Sie die WeChat-App-Zahlung, um eine Prepaid-ID zu erhalten
* @param int $order_num
*/
private function _wxpay_request($order_num = 0)
{

//Die Bestellnummer muss ein Array sein und nicht 0
check_order_num( $order_num);

                                                                                                                        $pay_url = $this->config->item("PAY_URL");
                                                                              ;
                                                                                   $helper = new WxPayHelper ();
                                                                                                                                                                                                                                                    . order_model->get_one($order_num);
                                                                                              "body"] = $pay_config['body'];//Kurze Beschreibung des Produkts oder Zahlungsauftrags
$data["mch_id"] = $pay_config[ 'mch_id'];//Händlernummer
$data[ "nonce_str"] = $nonce_str;//Zufälliger String
$data["notify_url"] = $notify_url;//Benachrichtigungsadresse
$data ["out_trade_no"] = $order_data["order_num"]; //Händler-Bestellnummer
$data["spbill_create_ip"] = $helper->get_client_ip();//Terminal-IP
$data[" total_fee"] = $order_data['total'] * 100; // Gesamtbetrag $ data ["trade_type"] = "app"; // Der Handelstyp
$ data ["sign"] = $ Helper- & gt; getSign ($ data, $ pay_config ['partner' ]);//Signature

      $xml    = $helper->arrayToXml($data); ; return_code"]) && $responseArr ["return_code"]=='SUCCESS' && isset($responseArr['result_code']) && $responseArr["result_code"]=='SUCCESS'){
     
   
$data_pay["appid "] = $pay_config['appid'];
$data_pay["noncestr"] = $nonce_str;
$data_pay["package"] = "Sign=WXPay";
$data_pay["partnerid "] = $pay_config['mch_id'];
$data_pay["prepayid"] = $responseArr['prepay_id'];
$data_pay[" timestamp"] = time( );
            $data_pay["sign"]         = $helper->getSign($data_pay, $pay_config['partner']);//二次签名
            
            
            $this->response = Array( 'status'=>0, 'msg'=>'success', 'data'=>$data_pay);
        }else{
        
            $return_msg = $responseArr['err_code_des'] ;    
             $this->response = array('status'=>0, 'msg'=>$return_msg, 'data'=>$responseArr);
        }
      
        
        
               
    }

//helper.php


class WxPayHelper{

/**
* Signatur überprüfen
* @param array $data
* @param string $key
* @return string
*/
function getVerifySign($data, $key)
{
$ String = $this->formatParameters($data, false);
//Signatur Schritt 2: KEY
nach string $String = $String .
/Signature hinzufügen Schritt drei: MD5-Verschlüsselung
$String = md5($String);
//Signatur Schritt vier: Alle Zeichen in Großbuchstaben umwandeln
$result = strtoupper($String);
return $ result;
}

function formatParameters($paraMap, $urlencode)
{
$buff = "";
ksort($paraMap);
foreach ($ paraMap AS $ k = & gt; $ v) {
if ($ k == "sign") {
Weiter;
}
if ($ urlencode) {
$ v = Urlencode ( $ v); } $ buff. "="
} $ ReqPar; ; 0) {
                                                                   
* Signatur abrufen
* @param object $obj
* @param string $api_key
* @return string
*/
function getSign($obj, $api_ key)
{
foreach ($obj as $k => $v)
{
$Parameters[strtolower($ k)] = $v;
}
//Signaturschritt 1: Parameter lexikografisch sortieren
ksort($Parameters);
$String = $this-> formatBizQueryParaMap($Parameters, false);
//Signaturschritt zwei: KEY
nach String hinzufügen $String = $String."&key=".$api_key;
//Signaturschritt drei: MD5-Verschlüsselung
$result = strtoupper(md5($String));
           return $result; = null;
$strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
$max = strlen($strPol)-1;
for($i=0;$i<$length;$i ){
$str.=$strPol[rand(0,$max)];//rand($min,$max) generiert einen Zufall Ganzzahl zwischen Min und Max
}
return $ str;
}

/**
* Eine zufällige Zeichenfolge mit der angegebenen Länge abrufen
* @param int $length
* @return Ambigous
*/
function arrayToXml($arr)
{

        header("Inhaltstyp: text/xml");            
        
        $xml = '';    
    
        foreach ($arr as $key=>$val)
        {
             if (is_numeric($val))
            . {
          $xml.="<". $key.">".$val."";
$key.">";  
        }
        $xml.= '
';
        return $xml;
    }
    
    /**
* XML an die entsprechende Schnittstellen-URL im Post-Modus senden useCert Ob ein Zertifikat erforderlich ist, der Standardwert ist nicht erforderlich
* @param int $second URL-Ausführungszeitlimit, der Standardwert ist 30s
* @throws WxPayException
*/
    function postXmlCurl($xml, $url, $second=30, $useCert=false, $sslcert_path='', $sslkey_path=' ')
    {

        $ch = curl_init();
        //设置超时
        curl_setopt($ch, CURLOPT_TIMEOUT, $second);
        curl_s etopt($ch,CURLOPT_URL, $url);

        //设置header
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
    
        if($useCert == true){
            curl_setopt ($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
            //设置证书
            //使用证书:cert 与 key 分别属于两个. pem文件
            curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
            curl_setopt($ch,CURLOPT_SSLCERT, $sslcert_path);
            curl_setop t($ch,CURLOPT_SSLKEYTYPE,'PEM');
            curl_setopt ($ch,CURLOPT_SSLKEY, $sslkey_path);
        }
         //post提交方式ch, CURLOPT_POSTFIELDS, $xml);
        //运行curl
        $data = curl_exec($ch);
        
        //返回结果
        if($data){
            curl_close($ch);
            return $data;
        } else {
            $error = curl_errno($ch);
    
            curl_close($ch);
            return false;
        }
    }

    /**
     * 获取当前服务器的IP
     * @return Ambigous
     */
    function get_client_ip()
    {
        if. (isset($_SERVER['REMOTE_ADDR ']) ) {
            $cip = $_SERVER['REMOTE_ADDR'];
        } elseif (getenv("REMOTE_ADDR")) {
            $cip = getenv("REMOTE_ADDR");
       } elseif. (get env ("HTTP_CLIENT_IP")) {
            $cip = getenv("HTTP_CLIENT_IP");
        } else {
            $cip = "127.0.0.1";
       . }
        $cip; { ;
        foreach ($paraMap as $k => $v)
        {
            if($urlencode)
            {
               $v = urlencode($v);
            }
            $buff .= strtolower($k) . "=" . $v . "&";
        }
        $reqPar;
        if (strlen($buff) > 0)
        {
           -1);
        }
        return $reqPar;
    /将XML转为array
        $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        return $array_data;
    }
    
}
    
    
?>

 

//异步通知

/**
* WeChat-Nachrichtenadresse
*/
    öffentliche Funktion weixin_notify()
    {
        
        
        Bibliotheken_include("wxpay/", "WxPayHelper.app.php");
        $helper = new WxPayHelper();        
        //微信配置
        $pay_config = $this->config->item("WEIXIN_PAY_NEED");    
       

        $xml = file_get_contents("php://input");
       
        if(!$xml){
            exit('');
        }
       
        $wx_back = $helper->xmlToArray($xml);
        
    
        if(empty($wx_back)){
            exit('');
        }
        $checkSign = $helper->getVerifySign($wx_back, $pay_config['partner']);
        
        //验证签名        
        if($checkSign==$wx_back['sign']){
            
            if. (isse t($wx_back['result_code']) && $wx_back[ 'result_code']=='SUCCESS') {
                $requestReturnData = file_get_contents("php://input");
                //商户订单号
                $out_ trade_no = $wx_back['out_trade_no'];

              
                
                //第三方订单编号
               wx_back["transaction_id"];
                
                //交易状态
                $trade_status = $wx_back ['result_code'];
                printf("%.2f", $wx_back['total_fee']/100);

               //公司业务处理

 

                //步返回给微信return_code>< ![CDATA[OK]]>');

            }
            
        }
       ;xml> ');
        

    }

 

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage