支付宝接口

//引入配置文件
public function __construct(){

        //引入库文件
        require 'res/lib/api/alipay/alipay_core.function.php';
        require 'res/lib/api/alipay/alipay_md5.function.php';
        require 'res/lib/api/alipay/alipay_notify.class.php';
        require 'res/lib/api/alipay/alipay_submit.class.php';
        
        //支付宝配置信息
        $this->alipay_config = array(
            //商户号
            'partner'        => '',
            //收款支付宝账号
            'seller_email'    => '',
            //安全检验码,以数字和字母组成的32位字符
            'key'            => '',
            //签名方式 不需修改
            'sign_type'        => strtoupper('MD5'),
            //字符编码格式 目前支持 gbk 或 utf-8
            'input_charset'    => strtolower('utf-8'),
            //ca证书路径地址,用于curl中ssl校验
            //请保证cacert.pem文件在当前文件夹目录中
            'cacert'        => getcwd().'/cacert.pem',
            //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
            'transport'        => 'http',
        );
    }
/**
     * 支付方法
     * 2015-11-2
     */
    public function pay($orderInfo){

        //参数设置
        $parameter=array(
            //服务
            "service"             => "create_direct_pay_by_user",
            //商户号
            'partner'            => $this->alipay_config['partner'],
            //支付宝账号
            'seller_email'        => "",
            //支付类型 必填,不能修改
            'payment_type'        => 1,
            //服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数
            'notify_url'        => "http://xxx.com/alipay/pay/notifyurl",
            //页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/
            'return_url'        => "http://xxx.com/alipay/pay/returnurl",
            //商户订单号 商户网站订单系统中唯一订单号,必填
            'out_trade_no'        => $orderInfo['order_num'],
            //订单名称 必填
            'subject'            => $orderInfo['order_name'],
            //付款金额 必填
            'total_fee'            => $orderInfo['order_fee'],
            //订单描述
            'body'                => $orderInfo['order_desc'],
            //商品展示地址 需以http://开头的完整路径
            'show_url'            => '',
            //防钓鱼时间戳 若要使用请调用类文件submit中的query_timestamp函数
            'anti_phishing_key'    => '',
            //客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1
            'exter_invoke_ip'    => '',
            //编码
            "_input_charset"    => trim($this->alipay_config['input_charset']),
        );
        
        $alipaySubmit = new AlipaySubmit($this->alipay_config);
        $html_text = $alipaySubmit->buildRequestForm($parameter,"post", "submit");
        return $html_text;
    }
/**
     * 异步通知方法
     * 2015-11-2
     */
    public function notifyurl(){
        
        $alipay_config=$this->alipay_config;
        //计算得出通知验证结果
        $alipayNotify = new AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyNotify();
        if($verify_result) {
            //验证成功
            //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
            $out_trade_no   = $_POST['out_trade_no'];      //商户订单号
            $trade_no       = $_POST['trade_no'];          //支付宝交易号
            $trade_status   = $_POST['trade_status'];      //交易状态
            $total_fee      = $_POST['total_fee'];         //交易金额
            $notify_id      = $_POST['notify_id'];         //通知校验ID。
            $notify_time    = $_POST['notify_time'];       //通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。
            $buyer_email    = $_POST['buyer_email'];       //买家支付宝帐号;
            $parameter = array(
                "out_trade_no"  => $out_trade_no, //商户订单编号;
                "trade_no"      => $trade_no,     //支付宝交易号;
                "total_fee"     => $total_fee,    //交易金额;
                "trade_status"  => $trade_status, //交易状态
                "notify_id"     => $notify_id,    //通知校验ID。
                "notify_time"   => $notify_time,  //通知的发送时间。
                "buyer_email"   => $buyer_email,  //买家支付宝帐号;
            );
            if($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS') {
                //交易成功
                //这里根据订单返回状态判断是否成功,并更新订单信息
            }
            echo "success";        //请不要修改或删除
        }else {
            //验证失败
            echo "fail";
        }
    }
/**
     * 返回页面方法
     * 2015-11-2
     */
    function returnurl(){
        
        $alipay_config=$this->alipay_config;
        $alipayNotify = new AlipayNotify($alipay_config);//计算得出通知验证结果
        $verify_result = $alipayNotify->verifyReturn();
        if($verify_result) {
            //验证成功
            //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
            $out_trade_no   = $_GET['out_trade_no'];      //商户订单号
            $trade_no       = $_GET['trade_no'];          //支付宝交易号
            $trade_status   = $_GET['trade_status'];      //交易状态
            $total_fee      = $_GET['total_fee'];         //交易金额
            $notify_id      = $_GET['notify_id'];         //通知校验ID。
            $notify_time    = $_GET['notify_time'];       //通知的发送时间。
            $buyer_email    = $_GET['buyer_email'];       //买家支付宝帐号;
            
            $parameter = array(
                "out_trade_no"   => $out_trade_no,      //商户订单编号;
                "trade_no"       => $trade_no,          //支付宝交易号;
                "total_fee"      => $total_fee,         //交易金额;
                "trade_status"   => $trade_status,      //交易状态
                "notify_id"      => $notify_id,         //通知校验ID。
                "notify_time"    => $notify_time,       //通知的发送时间。
                "buyer_email"    => $buyer_email,       //买家支付宝帐号
            );
        
            //交易成功
            if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
                //更新订单信息
                //跳转到指定页
                header('Location:');
            }
        }else {
            //验证失败
            //如要调试,请看alipay_notify.php页面的verifyReturn函数
            echo "支付失败!";
        }
 }

 

posted @ 2015-11-20 13:49  boystar  阅读(319)  评论(0编辑  收藏  举报