[转载]PHP支付宝手机支付 接口 - 小窗口的浪漫 - 博客园

[转载]支付宝手机支付 接口 – 小窗口的浪漫 – 博客园.

讲解:

一:取得  token

 

要取得 token 有两个 参数是 是必须

 

req_data  和 sign

req_data格式如下(这是一些必填的。如果想要更多的参数自己去下载手册):

<direct_trade_create_req>
<notify_url>{通知地址}
<call_back_url>{返回地址}
<seller_account_name>{商家支付宝账号}
<out_trade_no>{外部订单号}
{商品介绍}
<total_fee>{商品价格}

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'];?>" 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>

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏