随笔 - 7  文章 - 49  评论 - 10  阅读 - 30852

支付宝手机支付 接口

 

 讲解:

  一:取得  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>

  明天上返回的那个

 

        

posted on   luffy丶zhao  阅读(3193)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示