讲解:
一:取得 token
要取得 token 有两个 参数是 是必须
req_data 和 sign
req_data格式如下(这是一些必填的。如果想要更多的参数自己去下载手册):
1 2 3 4 5 6 7 8 | <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(签名)格式如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $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 解码 然后还得用解析 返回的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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' ])) {
$doc = new DOMDocument();
$doc ->loadXML( $para_text [ 'res_data' ]);
$para_text [ 'request_token' ] = $doc ->getElementsByTagName( "request_token" )->item(0)->nodeValue;
}
return $para_text ;
}
|
登入後複製
最后的 规范的支付表单数据 就是(这里是要用get)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $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 );
$return = array (
'online' => {联线},
'desc' => {支付说明},
'method' => 'GET' ,
'gateway' => 'http://wappaygw.alipay.com/service/rest.htm?' ,
'params' => $params ,
)
|
登入後複製
最后 跳转到支付宝
1 2 3 4 5 6 7 8 9 | <form action= "<?php echo $return['gateway'];?>" id= "payform" method= "<?php echo $return['method'];?>" style= "display:none" >
<?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>
|
登入後複製
明天上返回的那个