【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();
}
}
```