注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天高云淡的博客

A bad beginning makes a bad ending.

 
 
 

日志

 
 

自开发商务网站集成支付宝参考代码  

2010-07-05 15:37:23|  分类: 支付接口 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
以下六个文件,供自己开发商城系统时作为参考使用。

文件alipay_config.php

<?php
/*
    *功能:设置帐户有关信息及返回路径
    *版本:2.0
    *日期:2008-08-01
    '说明:
    '以下代码只是方便商户测试,提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
    '该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
*/

//////////页面功能说明////////////
//该页面是设置不会被经常变动的信息。
//建议partner、security_code、seller_email通过网站后台的设置来动态获取。
//////////////////////////////////

$partner        = "2088302407250557";       //合作伙伴ID
$security_code  = "p5shb0l2yefzccxs75c13u9lgdenbhdo";       //安全检验码
$seller_email   = "ce0217@sina.com";       //卖家支付宝帐户
$_input_charset = "utf-8";  //字符编码格式  目前支持 GBK 或 utf-8
$sign_type      = "MD5";    //加密方式  系统默认(不要修改)
$transport      = "http";  //访问模式,你可以根据自己的服务器是否支持ssl访问而选择http以及https访问模式
$notify_url     = "http://localhost/sw_php_utf8/notify_url.php"; //交易过程中服务器通知的页面 要用 http://格式的完整路径
$return_url     = "http://localhost/sw_php_utf8/return_url.php"; //付完款后跳转的页面 要用 http://格式的完整路径
$show_url       = "http://club.alipay.com/thread-htm-fid-703.html"        //你网站商品的展示地址

/** 提示:如何获取安全校验码和合作ID
1.访问 www.alipay.com,然后登陆您的帐户($seller_email).
2.点商家服务.导航栏的下面可以看到
*/
?>


文件alipay_notify.php

<?php
    /*
    *功能:付款过程中服务器通知类
    *版本:2.0
    *日期:2008-08-01
    *修改日期:2010-03-11
    '说明:
    '以下代码只是方便商户测试,提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
    '该代码仅供学习和研究支付宝接口使用,只是提供一个参考。

    */
   

// 日志消息,把支付宝反馈的参数记录下来
function  log_result($word) {
    $fp = fopen("log.txt","a");   
    flock($fp, LOCK_EX) ;
    fwrite($fp,"执行日期:".strftime("%Y%m%d%H%I%S",time())."\n".$word."\n");
    flock($fp, LOCK_UN);
    fclose($fp);
}

class alipay_notify {
    var $gateway;           //支付接口
    var $security_code;      //安全校验码
    var $partner;           //合作伙伴ID
    var $sign_type;         //加密方式 系统默认
    var $mysign;            //签名    
    var $_input_charset;    //字符编码格式
    var $transport;         //访问模式
    function alipay_notify($partner,$security_code,$sign_type = "MD5",$_input_charset = "GBK",$transport= "https") {
        $this->partner        = $partner;
        $this->security_code  = $security_code;
        $this->sign_type      = $sign_type;
        $this->mysign         = "";
        $this->_input_charset = $_input_charset ;
        $this->transport      = $transport;
        if($this->transport == "https") {
            $this->gateway = "https://www.alipay.com/cooperate/gateway.do?";
        }else $this->gateway = "http://notify.alipay.com/trade/notify_query.do?";
    }
/****************************************对notify_url的认证*********************************/
    function notify_verify() {  
        if($this->transport == "https") {
            $veryfy_url = $this->gateway. "service=notify_verify" ."&partner=" .$this->partner. "&notify_id=".$_POST["notify_id"];
        } else {
            $veryfy_url = $this->gateway. "partner=".$this->partner."&notify_id=".$_POST["notify_id"];
        }
        $veryfy_result = $this->get_verify($veryfy_url);
        $post          = $this->para_filter($_POST);
        $sort_post     = $this->arg_sort($post);
        while (list ($key, $val) = each ($sort_post)) {
            $arg.=$key."=".$val."&";
        }
        $prestr = substr($arg,0,count($arg)-2);  //去掉最后一个&号
        $this->mysign = $this->sign($prestr.$this->security_code);
        //写日志记录
        log_result("veryfy_result=".$veryfy_result."\n notify_url_log:sign=".$_POST["sign"]."&mysign=".$this->mysign."&".$this->charset_decode(implode(",",$_POST),$this->_input_charset ));
        if (eregi("true$",$veryfy_result) && $this->mysign == $_POST["sign"])  {
            return true;
        } else return false;
    }
/*******************************************************************************************/

/**********************************对return_url的认证***************************************/   
    function return_verify() { 
        if($this->transport == "https") {
            $veryfy_url = $this->gateway. "service=notify_verify" ."&partner=" .$this->partner. "&notify_id=".$_GET["notify_id"];
        } else {
            $veryfy_url = $this->gateway. "partner=".$this->partner."&notify_id=".$_GET["notify_id"];
        }
        $veryfy_result = $this->get_verify($veryfy_url);
        $sort_get= $this->arg_sort($_GET);
        while (list ($key, $val) = each ($sort_get)) {
            if($key != "sign" && $key != "sign_type")
            $arg.=$key."=".$val."&";
        }
        $prestr = substr($arg,0,count($arg)-2);  //去掉最后一个&号
        $this->mysign = $this->sign($prestr.$this->security_code);
        /*//调试用,支付宝服务器返回时的完整路径。
        while (list ($key, $val) = each ($_GET)) {
        $arg_get.=$key."=".$val."&";
        }*/
        //写日志记录
        //log_result("veryfy_result=".$veryfy_result."\n return_url_log=".$_GET["sign"]."&".$this->mysign."&".$this->charset_decode(implode(",",$_GET),$this->_input_charset ));
        if (eregi("true$",$veryfy_result) && $this->mysign == $_GET["sign"])  return true;
        else return false;
    }
/*******************************************************************************************/

    function get_verify($url,$time_out = "60") {
        $urlarr     = parse_url($url);
        $errno      = "";
        $errstr     = "";
        $transports = "";
        if($urlarr["scheme"] == "https") {
            $transports = "ssl://";
            $urlarr["port"] = "443";
        } else {
            $transports = "tcp://";
            $urlarr["port"] = "80";
        }
        $fp=@fsockopen($transports . $urlarr['host'],$urlarr['port'],$errno,$errstr,$time_out);
        if(!$fp) {
            die("ERROR: $errno - $errstr<br />\n");
        } else {
            fputs($fp, "POST ".$urlarr["path"]." HTTP/1.1\r\n");
            fputs($fp, "Host: ".$urlarr["host"]."\r\n");
            fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
            fputs($fp, "Content-length: ".strlen($urlarr["query"])."\r\n");
            fputs($fp, "Connection: close\r\n\r\n");
            fputs($fp, $urlarr["query"] . "\r\n\r\n");
            while(!feof($fp)) {
                $info[]=@fgets($fp, 1024);
            }
            fclose($fp);
            $info = implode(",",$info);
            while (list ($key, $val) = each ($_POST)) {
                $arg.=$key."=".$val."&";
            }
            //写日志记录
            //log_result("notify_url_log=".$url.$this->charset_decode($info,$this->_input_charset));
            //log_result("notify_url_log=".$this->charset_decode($arg,$this->_input_charset));
            return $info;
        }
    }

    function arg_sort($array) {
        ksort($array);
        reset($array);
        return $array;
    }

    function sign($prestr) {
        $sign='';
        if($this->sign_type == 'MD5') {
            $sign = md5($prestr);
        }elseif($this->sign_type =='DSA') {
            //DSA 签名方法待后续开发
            die("DSA 签名方法待后续开发,请先使用MD5签名方式");
        }else {
            die("支付宝暂不支持".$this->sign_type."类型的签名方式");
        }
        return $sign;
    }
/***********************除去数组中的空值和签名模式*****************************/
    function para_filter($parameter) {
        $para = array();
        while (list ($key, $val) = each ($parameter)) {
            if($key == "sign" || $key == "sign_type" || $val == "")continue;
            else    $para[$key] = $parameter[$key];
        }
        return $para;
    }
/********************************************************************************/

/******************************实现多种字符编码方式*****************************/
    function charset_encode($input,$_output_charset ,$_input_charset ="utf-8" ) {
        $output = "";
        if(!isset($_output_charset) )$_output_charset  = $this->parameter['_input_charset'];
        if($_input_charset == $_output_charset || $input ==null ) {
            $output = $input;
        } elseif (function_exists("mb_convert_encoding")){
            $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
        } elseif(function_exists("iconv")) {
            $output = iconv($_input_charset,$_output_charset,$input);
        } else die("sorry, you have no libs support for charset change.");
        return $output;
    }
/********************************************************************************/

/******************************实现多种字符解码方式******************************/
    function charset_decode($input,$_input_charset ,$_output_charset="utf-8"  ) {
        $output = "";
        if(!isset($_input_charset) )$_input_charset  = $this->_input_charset ;
        if($_input_charset == $_output_charset || $input ==null ) {
            $output = $input;
        } elseif (function_exists("mb_convert_encoding")){
            $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
        } elseif(function_exists("iconv")) {
            $output = iconv($_input_charset,$_output_charset,$input);
        } else die("sorry, you have no libs support for charset changes.");
        return $output;
    }
/*********************************************************************************/
}
?>


文件alipay_service.php

<?php
/**
    *类名:alipay_service
    *功能:支付宝外部服务接口控制
    *版本:2.0
    *日期:2008-08-01
    '说明:
    '以下代码只是方便商户测试,提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
    '该代码仅供学习和研究支付宝接口使用,只是提供一个参考。

*/

class alipay_service {

    var $gateway = "https://www.alipay.com/cooperate/gateway.do?";         //支付接口
    var $parameter;       //全部需要传递的参数
    var $security_code;   //安全校验码
    var $mysign;          //签名

    //构造支付宝外部服务接口控制
    function alipay_service($parameter,$security_code,$sign_type = "MD5",$transport= "https") {
        $this->parameter      = $this->para_filter($parameter);
        $this->security_code  = $security_code;
        $this->sign_type      = $sign_type;
        $this->mysign         = '';
        $this->transport      = $transport;
        if($parameter['_input_charset'] == "")
        $this->parameter['_input_charset']='GBK';
        if($this->transport == "https") {
            $this->gateway = "https://www.alipay.com/cooperate/gateway.do?";
        } else $this->gateway = "http://www.alipay.com/cooperate/gateway.do?";
        $sort_array  = array();
        $arg         = "";
        $sort_array  = $this->arg_sort($this->parameter);
        while (list ($key, $val) = each ($sort_array)) {
            $arg.=$key."=".$this->charset_encode($val,$this->parameter['_input_charset'],$this->parameter['_input_charset'])."&";
        }
        $prestr = substr($arg,0,count($arg)-2);  //去掉最后一个问号
        $this->mysign = $this->sign($prestr.$this->security_code);
    }

    //若使用GET方式传递,请使用create_url函数获得完整URL链接
    function create_url() {
        $url         = $this->gateway;
        $sort_array  = array();
        $arg         = "";
        $sort_array  = $this->arg_sort($this->parameter);
        while (list ($key, $val) = each ($sort_array)) {
            $arg.=$key."=".urlencode($this->charset_encode($val,$this->parameter['_input_charset'],$this->parameter['_input_charset']))."&";
        }
        $url.= $arg."sign=" .$this->mysign ."&sign_type=".$this->sign_type;
        return $url;
    }
   
    //若使用POST方式传递,请使用Get_Sign函数获得加密结果字符串
    function Get_Sign() {
        $url = $this->gateway;
        $sort_array = array();
        $arg = "";
        $sort_array = $this->arg_sort($this->parameter);
        while (list ($key, $val) = each ($sort_array)) {
            $arg.=$key."=".urlencode($this->charset_encode($val,$this->parameter['_input_charset'],$this->parameter['_input_charset']))."&";
        }
        return $this->mysign;
    }

    function arg_sort($array) {
        ksort($array);
        reset($array);
        return $array;
    }

    function sign($prestr) {
        $mysign = "";
        if($this->sign_type == 'MD5') {
            $mysign = md5($prestr);
        }elseif($this->sign_type =='DSA') {
            //DSA 签名方法待后续开发
            die("DSA 签名方法待后续开发,请先使用MD5签名方式");
        }else {
            die("支付宝暂不支持".$this->sign_type."类型的签名方式");
        }
        return $mysign;
    }
    function para_filter($parameter) { //除去数组中的空值和签名模式
        $para = array();
        while (list ($key, $val) = each ($parameter)) {
            if($key == "sign" || $key == "sign_type" || $val == "")continue;
            else    $para[$key] = $parameter[$key];
        }
        return $para;
    }
    //实现多种字符编码方式
    function charset_encode($input,$_output_charset ,$_input_charset ) {
        $output = "";
        if(!isset($_output_charset) )$_output_charset  = $this->parameter['_input_charset'];
        if($_input_charset == $_output_charset || $input ==null) {
            $output = $input;
        } elseif (function_exists("mb_convert_encoding")){
            $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
        } elseif(function_exists("iconv")) {
            $output = iconv($_input_charset,$_output_charset,$input);
        } else die("sorry, you have no libs support for charset change.");
        return $output;
    }
}
?>

文件index.php

<?php
/**
    *类名:alipay_service
    *功能:支付宝外部服务接口控制
    *版本:2.0
    *日期:2008-08-01
    '说明:
    '以下代码只是方便商户测试,提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
    '该代码仅供学习和研究支付宝接口使用,只是提供一个参考。

*/

class alipay_service {

    var $gateway = "https://www.alipay.com/cooperate/gateway.do?";         //支付接口
    var $parameter;       //全部需要传递的参数
    var $security_code;   //安全校验码
    var $mysign;          //签名

    //构造支付宝外部服务接口控制
    function alipay_service($parameter,$security_code,$sign_type = "MD5",$transport= "https") {
        $this->parameter      = $this->para_filter($parameter);
        $this->security_code  = $security_code;
        $this->sign_type      = $sign_type;
        $this->mysign         = '';
        $this->transport      = $transport;
        if($parameter['_input_charset'] == "")
        $this->parameter['_input_charset']='GBK';
        if($this->transport == "https") {
            $this->gateway = "https://www.alipay.com/cooperate/gateway.do?";
        } else $this->gateway = "http://www.alipay.com/cooperate/gateway.do?";
        $sort_array  = array();
        $arg         = "";
        $sort_array  = $this->arg_sort($this->parameter);
        while (list ($key, $val) = each ($sort_array)) {
            $arg.=$key."=".$this->charset_encode($val,$this->parameter['_input_charset'],$this->parameter['_input_charset'])."&";
        }
        $prestr = substr($arg,0,count($arg)-2);  //去掉最后一个问号
        $this->mysign = $this->sign($prestr.$this->security_code);
    }

    //若使用GET方式传递,请使用create_url函数获得完整URL链接
    function create_url() {
        $url         = $this->gateway;
        $sort_array  = array();
        $arg         = "";
        $sort_array  = $this->arg_sort($this->parameter);
        while (list ($key, $val) = each ($sort_array)) {
            $arg.=$key."=".urlencode($this->charset_encode($val,$this->parameter['_input_charset'],$this->parameter['_input_charset']))."&";
        }
        $url.= $arg."sign=" .$this->mysign ."&sign_type=".$this->sign_type;
        return $url;
    }
   
    //若使用POST方式传递,请使用Get_Sign函数获得加密结果字符串
    function Get_Sign() {
        $url = $this->gateway;
        $sort_array = array();
        $arg = "";
        $sort_array = $this->arg_sort($this->parameter);
        while (list ($key, $val) = each ($sort_array)) {
            $arg.=$key."=".urlencode($this->charset_encode($val,$this->parameter['_input_charset'],$this->parameter['_input_charset']))."&";
        }
        return $this->mysign;
    }

    function arg_sort($array) {
        ksort($array);
        reset($array);
        return $array;
    }

    function sign($prestr) {
        $mysign = "";
        if($this->sign_type == 'MD5') {
            $mysign = md5($prestr);
        }elseif($this->sign_type =='DSA') {
            //DSA 签名方法待后续开发
            die("DSA 签名方法待后续开发,请先使用MD5签名方式");
        }else {
            die("支付宝暂不支持".$this->sign_type."类型的签名方式");
        }
        return $mysign;
    }
    function para_filter($parameter) { //除去数组中的空值和签名模式
        $para = array();
        while (list ($key, $val) = each ($parameter)) {
            if($key == "sign" || $key == "sign_type" || $val == "")continue;
            else    $para[$key] = $parameter[$key];
        }
        return $para;
    }
    //实现多种字符编码方式
    function charset_encode($input,$_output_charset ,$_input_charset ) {
        $output = "";
        if(!isset($_output_charset) )$_output_charset  = $this->parameter['_input_charset'];
        if($_input_charset == $_output_charset || $input ==null) {
            $output = $input;
        } elseif (function_exists("mb_convert_encoding")){
            $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
        } elseif(function_exists("iconv")) {
            $output = iconv($_input_charset,$_output_charset,$input);
        } else die("sorry, you have no libs support for charset change.");
        return $output;
    }
}
?>
<?php
/*
    *功能:设置帐户有关信息及返回路径
    *版本:2.0
    *日期:2008-08-01
    '说明:
    '以下代码只是方便商户测试,提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
    '该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
*/

//////////页面功能说明////////////
//该页面是设置不会被经常变动的信息。
//建议partner、security_code、seller_email通过网站后台的设置来动态获取。
//////////////////////////////////

$partner        = "2088302407250557";       //合作伙伴ID
$security_code  = "p5shb0l2yefzccxs75c13u9lgdenbhdo";       //安全检验码
$seller_email   = "ce0217@sina.com";       //卖家支付宝帐户
$_input_charset = "utf-8";  //字符编码格式  目前支持 GBK 或 utf-8
$sign_type      = "MD5";    //加密方式  系统默认(不要修改)
$transport      = "http";  //访问模式,你可以根据自己的服务器是否支持ssl访问而选择http以及https访问模式
$notify_url     = "http://localhost/sw_php_utf8/notify_url.php"; //交易过程中服务器通知的页面 要用 http://格式的完整路径
$return_url     = "http://localhost/sw_php_utf8/return_url.php"; //付完款后跳转的页面 要用 http://格式的完整路径
$show_url       = "http://club.alipay.com/thread-htm-fid-703.html"        //你网站商品的展示地址

/** 提示:如何获取安全校验码和合作ID
1.访问 www.alipay.com,然后登陆您的帐户($seller_email).
2.点商家服务.导航栏的下面可以看到
*/
?>

<?php
/*
    *功能:设置商品有关信息及物流信息
    *版本:2.0
    *日期:2008-08-01
    *修改日期:2010-04-22
    '说明:
    '以下代码只是方便商户测试,提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
    '该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
*/

//require_once("alipay_service.php");
//require_once("alipay_config.php");

////////////页面功能说明///////////
//该页面是接口入口页面,生成支付时的URL
//该页面测试时出现“调试错误”请参考:http://club.alipay.com/read-htm-tid-8681712.html
//要传递的参数要么不允许为空,要么就不要出现在数组与隐藏控件或URL链接里
///////////////////////////////////

///////以下参数是需要通过下单时的订单数据传入进来获得//////////
$out_trade_no = date('Ymdhms');
$subject = "订单名称";
$body = "订单描述备注";
$price = "0.01";

$receive_name = "测试";
$receive_address = "测试收货地址";
$receive_zip = "123456";
$receive_phone = "0571-81234567";
$receive_mobile = "13312341234";

$logistics_fee_1 = "0.00";
$logistics_payment_1 = "BUYER_PAY";
$logistics_type_1 = "EMS";
   
$logistics_fee_2 = "0.00";
$logistics_payment_2 = "BUYER_PAY";
$logistics_type_2 = "POST";

$buyer_email = "abc@126.com";
////////////////////////////////////////////////////////////

$parameter = array(
/////////////////不会更改的必填参数/////////////////////////////
    "service"        => "create_partner_trade_by_buyer",  //交易类型 实物标准双接口服务名称:trade_create_by_buyer ; 中介担保交易(纯担保交易)服务名称:create_partner_trade_by_buyer
    "payment_type"   => "1",                      //默认为1,不需要修改
    "_input_charset" => $_input_charset,          //字符集,默认为GBK
   
/////////////////必填的参数////////////////////////////////////
    "partner"        => $partner,                 //合作身份者ID
    "seller_email"   => $seller_email,            //收款支付宝账号,一般是签约支付宝账号
    "out_trade_no"   => $out_trade_no,            //商家网站唯一订单号(保证商家网站订单系统的里的订单号唯一)
    "subject"        => $subject,                 //商品名称,订单主题
    "price"          => $price,                   //商品单价,订单总价(价格不能为0)
    "quantity"       => "1",                      //商品数量(用于商品单价时的数量)
   
    "logistics_fee"      => '0.00',               //物流配送费用
    "logistics_payment"  => 'BUYER_PAY',          //物流费用付款方式:SELLER_PAY(卖家支付)、BUYER_PAY(买家支付)、BUYER_PAY_AFTER_RECEIVE(货到付款)
    "logistics_type"     => 'EXPRESS',            //物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)
   
/////////////////建议填写的重要的参数/////////////////////////
    "return_url"     => $return_url,              //同步返回,返回页路径地址
    "notify_url"     => $notify_url,              //异步返回,通知页路径地址
    "body"           => $body,                    //商品描述,订单备注

    "show_url"       => $show_url,                 //商品相关网站

////////////////其他有用的选填参数///////////////////////////
    //收货人信息,当至少含有这些参数中的receive_name、receive_address、receive_zip时,到达支付宝收银台以后的操作步骤中会减少设置收货人信息的一步
    "receive_name"     => $receive_name,           //收货人姓名
    "receive_address"=> $receive_address,       //收货人地址
    "receive_zip"     => $receive_zip,           //收货人邮编
    "receive_phone"  => $receive_phone,           //收货人联系电话
    "receive_mobile" => $receive_mobile,       //收货人手机
   
    "buyer_email"     => $buyer_email           //买家支付宝账号
/*
    "logistics_fee_1"    => $logistics_fee_1,             //物流配送费用
    "logistics_payment_1"=> $logistics_payment_1,        //物流费用付款方式:SELLER_PAY(卖家支付)、BUYER_PAY(买家支付)、BUYER_PAY_AFTER_RECEIVE(货到付款)
    "logistics_type_1"   => $logistics_type_1,              //物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)
   
    "logistics_fee_2"    => $logistics_fee_2,             //物流配送费用
    "logistics_payment_2"=> $logistics_payment_2,        //物流费用付款方式:SELLER_PAY(卖家支付)、BUYER_PAY(买家支付)、BUYER_PAY_AFTER_RECEIVE(货到付款)
    "logistics_type_2"   => $logistics_type_2             //物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)
*/
);
$alipay = new alipay_service($parameter,$security_code,$sign_type);


//POST方式传递,得到加密结果字符串
$sign = $alipay->Get_Sign();


//若改成GET方式传递,请取消下面的两行注释
$link=$alipay->create_url();
/*echo "<script>window.location =\"$link\";</script>";
*/
?>
<html>
<head>
<title>支付宝担保接口</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body>
            <form name="alipaysubmit" method="post" action="https://www.alipay.com/cooperate/gateway.do?_input_charset=<?=$_input_charset?>">
                <input type=hidden name="service" value="create_partner_trade_by_buyer">
                <input type=hidden name="partner" value="<?=$partner?>">
                <input type=hidden name="return_url" value="<?=$return_url?>">
                <input type=hidden name="notify_url" value="<?=$notify_url?>"> 
                <input type=hidden name="subject" value="<?=$subject?>">
                <input type=hidden name="body" value="<?=$body?>">
                <input type=hidden name="out_trade_no" value="<?=$out_trade_no?>">
                <input type=hidden name="price" value="<?=$price?>">
                <input type=hidden name="quantity" value="1">
                <input type=hidden name="payment_type" value="1">
                <input type=hidden name="show_url" value="<?=$show_url?>">
                <input type=hidden name="seller_email" value="<?=$seller_email?>">
                <input type=hidden name="logistics_fee" value="0.00">
                <input type=hidden name="logistics_payment" value="BUYER_PAY">
                <input type=hidden name="logistics_type" value="EXPRESS">
                <input type=hidden name="sign" value="<?=$sign?>">
                <input type=hidden name="sign_type" value="MD5">
               
                <input type=hidden name="receive_name" value="<?=$receive_name?>">
                <input type=hidden name="receive_address" value="<?=$receive_address?>">
                <input type=hidden name="receive_zip" value="<?=$receive_zip?>">
                <input type=hidden name="receive_phone" value="<?=$receive_phone?>">
                <input type=hidden name="receive_mobile" value="<?=$receive_mobile?>">
               
                <input type=hidden name="buyer_email" value="<?=$buyer_email?>">
                <!--
                <input type=hidden name="logistics_fee_1" value="<?=$logistics_fee_1?>">
                <input type=hidden name="logistics_payment_1" value="<?=$logistics_payment_1?>">
                <input type=hidden name="logistics_type_1" value="<?=$logistics_type_1?>">
                <input type=hidden name="logistics_fee_2" value="<?=$logistics_fee_2?>">
                <input type=hidden name="logistics_payment_2" value="<?=$logistics_payment_2?>">
                <input type=hidden name="logistics_type_2" value="<?=$logistics_type_2?>">
                 -->
            </form>
    <table>
        <tr><td>
            <input type="button" name="v_action" value="支付宝网上安全即时支付平台" onClick="alipaysubmit.submit()">
        </td></tr>
    </table>
</body>
</html>

文件notify_url.php

<?php
/*
    *功能:付款过程中服务器通知页面
    *版本:2.0
    *日期:2008-08-01
    *修正日期:2010-4-22
    '说明:
    '以下代码只是方便商户测试,提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
    '该代码仅供学习和研究支付宝接口使用,只是提供一个参考。

*/

///////////页面功能说明///////////////
//创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。
//当支付宝的订单状态改变时,支付宝服务器则会自动调用此页面,因此请做好自身网站订单信息与支付宝上的订单的同步工作
//该页面不能在本机电脑测试,请到服务器上做测试,即互联网能够访问得到这个页面即可。
//该页面调试工具请使用写文本函数log_result,该函数已被默认开启,见alipay_notify.php中的函数notify_verify
/////////////////////////////

require_once("alipay_notify.php");
require_once("alipay_config.php");
$alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport);
$verify_result = $alipay->notify_verify();
if($verify_result) {   //认证合格
 //获取支付宝的反馈参数
    $dingdan  = $_POST['out_trade_no'];    //获取支付宝传递过来的订单号
    $total    = $_POST['price'];        //获取支付宝传递过来的总价格
   
/*
    获取支付宝反馈过来的状态,根据不同的状态来更新数据库
    WAIT_BUYER_PAY(表示等待买家付款);
    TRADE_FINISHED(表示交易已经成功结束);
*/

//如果您申请了支付宝的购物卷功能,请在返回的信息里面不要做金额的判断,否则会出现校验通不过,出现订单无法更新。如果您需要获取买家所使用购物卷的金额,
//请获取返回信息的这个字段discount的值,取绝对值,就是买家付款优惠的金额。即 原订单的总金额=买家付款返回的金额total_fee +|discount|.
    if($_POST['trade_status'] == 'WAIT_BUYER_PAY') {         //交易状态:等待买家付款
        //放入交易状态是订单交易创建还未付款的数据库更新程序代码,也可不放入任何代码。
        echo "success";
        //log_result("verify_success");
    }
    else if($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {    //交易状态:买家已付款,等待卖家发货
        //放入订单交易完成后的数据库更新程序代码,请务必保证echo出来的信息只有success
        echo "success";

        //log_result("verify_success");
    }   
    else if($_POST['trade_status'] == 'WAIT_BUYER_CONFIRM_GOODS') {    //交易状态:卖家已发货等待买家确认收货
        //放入订单交易完成后的数据库更新程序代码,请务必保证echo出来的信息只有success
        echo "success";

        //log_result("verify_success");
    }   
    else if($_POST['trade_status'] == 'TRADE_FINISHED') {    //交易状态:交易成功结束
        //放入订单交易完成后的数据库更新程序代码,请务必保证echo出来的信息只有success
        echo "success";

        //log_result("verify_success");
    }   
    else {//放置更多交易状态,见http://club.alipay.com/read-htm-tid-8681385-fpage-2.html
        echo "success";
        //log_result ("verify_failed");
    }
}
else {    //认证不合格
    echo "fail";
    //log_result ("verify_failed");
}
?>

文件return_url.php

<?php
/*
    *功能:付完款后跳转的页面
    *版本:2.0
    *日期:2008-08-01
    *修正日期:2010-4-22
    '说明:
    '以下代码只是方便商户测试,提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
    '该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
   
*/

///////////页面功能说明///////////////
//该页面可在本机电脑测试
//该页面称作“返回页”,是同步被支付宝服务器所调用,可当作是支付完成后的提示信息页,如“您的某某某订单,多少金额已支付成功”。
//可放入HTML等美化页面的代码、订单交易完成后的数据库更新程序代码
//该页面调试工具可以使用PHP拥有的断点调试工具Zend Studio,也可以使用写文本函数log_result,该函数已被默认关闭,见alipay_notify.php中的函数return_verify
/////////////////////////////

require_once("alipay_notify.php");
require_once("alipay_config.php");
$alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport);
$verify_result = $alipay->return_verify();

//获取支付宝的反馈参数
   $dingdan    = $_GET['out_trade_no'];    //获取支付宝传递过来的订单号
   $total    = $_GET['price'];            //获取支付宝传递过来的总价格 

if($verify_result) {    //认证合格
    if($_GET['trade_status'] == 'WAIT_SELLER_SEND_GOODS') //交易状态:买家已付款,等待卖家发货
    {
        //log_result("verify_success");
       
        //如果您申请了支付宝的购物卷功能,请在返回的信息里面不要做金额的判断,否则会出现校验通不过,出现订单无法更新。如果您需要获取买家所使用购物卷的金额,
        //请获取返回信息的这个字段discount的值,取绝对值,就是买家付款优惠的金额。即 原订单的总金额=买家付款返回的金额total_fee +|discount|.

        echo "支付成功<br>订单号是:".$dingdan."<br>订单金额是:".$total;
    }
    else
    {
        echo "fail";
    }
}
else {    //认证不合格
    echo "fail";
    //log_result ("verify_failed");
}
?>
  评论这张
 
阅读(1947)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017