【Day 38】php微信掃引コード支払いソースコード

8304 ワード

             createUrl.php、ArrayToXML.php、returnGoodsUrl.php、notifyUrl.php 。

createUrl.php:           

```
OpenId;
$AppId = $postObj->AppId;
$IsSubscribe = $postObj->IsSubscribe;
$ProductId = $postObj->ProductId;
$TimeStamp = $postObj->TimeStamp;
$NonceStr = $postObj->NonceStr;
$AppSignature = $postObj->AppSignature;
$SignMethod = $postObj->SignMethod;


/**
 *    ,     ,       ,  openID            
 * 
 */
function createTradeId(){
 $curDateTime = date("YmdHis");
 //date_default_timezone_set(PRC);
 $strDate = date("Ymd");
 $strTime = date("His");
 //4    
 $randNum = rand(1000, 9999);
 //10    ,      。
 $strReq = $strTime . $randNum;
 /*        */
 $mch_vno = $curDateTime . $strReq;
 /********************/
 /*todo            */
 /********************/
 return $mch_vno;
}

/**
 *    :      pakage
 * @param string $body      
 * @param string $total_fee      ,    。

 * @param string $out_trade_no           
 * @return $package
 */
function getPackage($body,$total_fee,$out_trade_no){ 
 $ip=$_SERVER["REMOTE_ADDR"];
 if($ip=="::1"||empty($ip)){
 $ip="127.0.0.1";
 }
 $banktype = "WX";
 $fee_type = "1";//    ,  1       
 $input_charset = "GBK";//   ,       GBK
 $notify_url = "http://xxxxxx.com/Wxpay/notify.html";//           
 $out_trade_no =createTradeId();//   ,                  
 $partner = "XXXXXXXX"; //   
 $spbill_create_ip =$ip;//       IP
 $partnerKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";//             :     ,                。  key          。
 //     :       ,               。        key=value               ,           key=XXXX。         ,                 。
 $signString = "bank_type=".$banktype."&body=".$body."&fee_type=".$fee_type."&input_charset=".$input_charset."¬ify_url=".$notify_url."&out_trade_no=".$out_trade_no."&partner=".$partner."&spbill_create_ip=".$spbill_create_ip."&total_fee=".$total_fee."&key=".$partnerKey;
 $md5SignValue = ("" .strtoupper(md5(($signString))));
 //echo $md5SignValue;
 //     ,       url  。
 $banktype = encodeURIComponent($banktype);
 $body=encodeURIComponent($body);
 $fee_type=encodeURIComponent($fee_type);
 $input_charset = encodeURIComponent($input_charset);
 $notify_url = encodeURIComponent($notify_url);
 $out_trade_no = encodeURIComponent($out_trade_no);
 $partner = encodeURIComponent($partner);
 $spbill_create_ip = encodeURIComponent($spbill_create_ip);
 $total_fee = encodeURIComponent($total_fee);

 //        ,    key=value  sign                 ,     sign=value
 $completeString = "bank_type=".$banktype."&body=".$body."&fee_type=".$fee_type."&input_charset=".$input_charset."¬ify_url=".$notify_url."&out_trade_no=".$out_trade_no."&partner=".$partner."&spbill_create_ip=".$spbill_create_ip."&total_fee=".$total_fee;
 $completeString = $completeString."&sign=".$md5SignValue;
 $oldPackageString = $completeString; //  package,             
 return $completeString;
}

//  js  encodeURIComponent  
function encodeURIComponent($str) {
 $revert = array('%21'=>'!', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')');
 return strtr(rawurlencode($str), $revert);
}
/**
   :
    Package   ,  URL       xml        ,  :



 1369745073

0
 RetErrMsg>


 SignMethod >

                        ,   RetCode  
RetErrMsg      ,RetCode  0     ,        ;        ,
   RetErrMsg    UTF8          ,  “       ”,    
      。
 **/

$data=array(
 "AppId"=>$AppId,
 "Package"=>getPackage("    ",100,"201311291504302501231"),
 "TimeStamp"=>strtotime(),
 "NonceStr"=>$NonceStr,
 "RetCode"=>0, //RetCode  0     ,        ;        ,   RetErrMsg    UTF8          ,  “       ”,          。
 "RetErrMsg"=>"    ",
 "AppSignature"=>$AppSignature,
 "SignMethod"=>"sha1"
);
//     xml  
echo ArrayToXML::arrtoxml($data);
```

notifyUrl.php :       ,           、    、   openId      get post         ,         ,            ,          success,    ,          。  ,               。


```

/**
          notify_url   ,  post   。          ,url      :
 【       】         V2.2.pdf        

  , postData      xml   。    :



1
 1369743511



 SignMethod >

                       
*/
//         postData  
$postdata = file_get_contents("php://input"); 
$postObj = simplexml_load_string ( $postdata, 'SimpleXMLElement', LIBXML_NOCDATA );
$trade_state =$_GET ["trade_state"];//    
$out_trade_no = $_GET ["out_trade_no"];//   
/*****************  Todo               ,         **************************/
if($trade_state==0){
 echo "success";
}else{
 echo "false";
}
```

ArrayToXML.php:              xml。


```
createElement("xml"); 
  $dom->appendChild($item);
 }
 foreach ($arr as $key=>$val){
  $itemx = $dom->createElement(is_string($key)?$key:"item");
  $item->appendChild($itemx);
  if (!is_array($val)){
   $text = $dom->createTextNode($val);
   $itemx->appendChild($text);

  }else {
   self::arrtoxml($val,$dom,$itemx);
  }
 }
 return $dom->saveXML();
 }
}
```