講解:
一:取得 token
要取得 token 有兩個 參數是 是必須
req_data 和 sign
req_data格式如下(這是一些必填的。如果想要更多的參數自己去下載手冊):
<direct_trade_create_req>
<notify_url>{通知地址}</notify_url>
<call_back_url>{返回地址}</call_back_url>
<seller_account_name>{商家支付寶賬號}</seller_account_name>
<out_trade_no>{外部訂單號}</out_trade_no>
<subject>{商品介紹}</subject>
<total_fee>{商品價格}</total_fee>
</direct_trade_create_req>
sign(簽名)格式如下
$params = array(
/* 基本信息 */
'partner' => {支付寶pid},
'req_id' => md5({網站訂單號}),
'service' => 'alipay.wap.trade.create.direct',
'format' => 'xml',
'v' => '2.0',
'sec_id' => 'MD5',
"_input_charset" => CHARSET
"req_data" => {以面的req_data}
);
if($sort){
/* 排序 */
ksort($params);
reset($params);
}
$sign = '';
foreach ($params AS $key => $value)
{
$sign .= "{$key}={$value}&";
}
md5(substr($sign, 0, -1) . {支付寶key});
sign 要注意的地方 是 排序 md5之前一定要按手冊上的排序不然會出錯的
然後以post方式提交給
http://wappaygw.alipay.com/service/rest.htm?
注意 返回的 數據是 經過 urlencode 的 所心我們要用 urldecode 解碼 然後還得用解析 返回的數據
/**
* 解析遠程模擬提交後返回的信息
* @param $str_text 要解析的字符串
* @return 解析結果
*/
function parseResponse($str_text) {
//以“&”字符切割字符串
$para_split = explode('&',$str_text);
//把切割後的字符串數組變成變量與數值組合的數組
foreach ($para_split as $item) {
//獲得第一個=字符的位置
$nPos = strpos($item,'=');
//獲得字符串長度
$nLen = strlen($item);
//獲得變量名
$key = substr($item,0,$nPos);
//獲得數值
$value = substr($item,$nPos+1,$nLen-$nPos-1);
//放入數組中
$para_text[$key] = $value;
}
if( ! empty ($para_text['res_data'])) {
//token從res_data中解析出來(也就是說res_data中已經包含token的內容)
$doc = new DOMDocument();
$doc->loadXML($para_text['res_data']);
$para_text['request_token'] = $doc->getElementsByTagName( "request_token" )->item(0)->nodeValue;
}
return $para_text;
}
最後的 規范的支付表單數據 就是(這裡是要用get)
$params = array(
'partner' => $this->_config['wap_alipay_partner'],
'req_id' => md5({網站訂單號}),
'service' => 'alipay.wap.trade.create.direct',
'format' => 'xml',
'v' => '2.0',
'sec_id' => 'MD5',
"_input_charset" => CHARSET
'req_data'=>'<auth_and_execute_req><request_token>' . {token} . '</request_token></auth_and_execute_req>',
'service' => "alipay.wap.auth.authAndExecute",
);
//這個地方也要簽名的。方式和上面一樣
$params['sign'] = _get_sign($params);
//get數據
$return = array(
'online' => {聯線},
'desc' => {支付說明},
'method' => 'GET',
'gateway' => 'http://wappaygw.alipay.com/service/rest.htm?',
'params' => $params,
)
最後 跳轉到支付寶
<form action="<?php echo $return['gateway'];?>" id="payform" method="<?php echo $return['method'];?>" >
<?php foreach ( $return['params'] $_k=>$value){?>
<input type="hidden" name="<?php echo $_k;>" value="<?php echo $value;>" />
<?php }?>
</form>
<script type="text/javascript">
document.getElementById('payform').submit();
</script>
明天上返回的那個