支付宝手机支付 接口
讲解:
一:取得 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'];?>" 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> |
明天上返回的那个
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架