thinkphp3.2.3 谁帮我试试支付这些接口好不好使源码复制即可,写的好了手机没电没发转账

浏览:1840 发布日期:2015/04/06 分类:技术分享
按照原THINKPHP 就可以
担保交易我试了好使 谁能帮我试试 双向接口 和即时到账 还有 确认发货 和即时到账批量退款有密接口 这些接口好不好使呢<?php
/*+++++++++++
++
++  2015-4-5 下午8:06:34
++
++++++++++++*/
namespace Home\Controller;
use Think\Controller;
class PayController extends Controller {
    public function _initialize(){
        import('Org.Alipay.Corefunction');
        import('Org.Alipay.Md5function');
        import('Org.Alipay.Notify');
        import('Org.Alipay.Submit');
        //验证用户是否登录的代码
        // echo 'this is _initialize';
    }
    ///$despatching_inquery=array(
    //'types'=>'0' //类型
    //'deal_types'=>''//接口类型
    public function index(){
        
        $arr=array('types'=>'0','deal_types'=>'2');
        
        $value=array(
                       'T_URL'           =>  '',//控制跳转URL //必填
                       'WIDout_trade_no'  =>  'aqewrasdfaqqwer',////商户订单号//商户网站订单系统中唯一订单号,必填
                        // 即使到账 担保交易 双向收款 公用
                       'WIDsubject'       =>  '32123123',////订单名称 //必填
                       'WIDshow_url'      =>  '123123',//商品展示地址//需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html
                       'WIDbody'          =>  '2123321',//订单描述
                       'WIDprice'         =>  '0.10',//付款金额//必填
                       'QUAntity'         =>  '1',//商品数量//必填,建议默认为1,不改变值,把一次交易看成是一次下订单而非购买一件商品
                       'Logistics_fee'    =>  '0.00',//物流费用//必填,即运费
                       'Logistics_type'   =>  "EXPRESS",//物流类型//必填,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)
                       'Logistics_payment'=>  "SELLER_PAY",//物流支付方式//必填,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)
                       'WIDreceive_name'  =>  '',//收货人姓名
                       'WIDreceive_address'=> '',//收货人地址//如:XX省XXX市XXX区XXX路XXX小区XXX栋XXX单元XXX号
                       'WIDreceive_zip'   =>  '',//收货人邮编//如:123456
                       'WIDreceive_phone' =>  '',//收货人电话号码//如:0571-88158090
                       'WIDreceive_mobile'=>  '',//收货人手机号码//如:13312341234
        );
        $this->alipayapi($value,$arr);
    }
    /**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     * $this->alipayapi($value,$arr);
     * $value  //传送内容 $arr//传送类型
     * $arr=array(
     *      'types'    => '0', //类型  0担保 即使 双向 交易// 1 单笔交易查询  2 确认发货  3即使到账批量退款有密接口
     *      'deal_types'=>'1', //类型  1 担保交易 2 双向收款 3 即时到账
     * );
     * $value=array(
     *            // 即使到账 担保交易 双向收款 单笔查询 公用填写项目
     *           'T_URL'            =>  '',//控制跳转URL //必填 
     *           'WIDout_trade_no'  =>  '',////商户订单号//商户网站订单系统中唯一订单号,必填
     *            // 即使到账 担保交易 双向收款 公用
     *           'WIDsubject'       =>  '',////订单名称 //必填
     *           'WIDshow_url'      =>  '',//商品展示地址//需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html
     *           'WIDbody'          =>  '',//订单描述
     *           'WIDprice'         =>  '',//付款金额//必填
     *            // 即使到账 
     *           'Paymethod'        =>  "bankPay",//默认支付方式//必填
     *           'WIDdefaultbank'   =>  '',//默认网银//必填,银行简码请参考接口技术文档
     *           'Anti_phishing_key'=>  '',//防钓鱼时间戳//若要使用请调用类文件submit中的query_timestamp函数
     *           'EXTer_invoke_ip'  =>  '',//客户端的IP地址//非局域网的外网IP地址,如:221.0.0.1
     *           //双向 担保  
     *           'QUAntity'         =>  '1',//商品数量//必填,建议默认为1,不改变值,把一次交易看成是一次下订单而非购买一件商品
     *           'Logistics_fee'    =>  '0.00',//物流费用//必填,即运费
     *           'Logistics_type'   =>  "EXPRESS",//物流类型//必填,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)
     *           'Logistics_payment'=>  "SELLER_PAY",//物流支付方式//必填,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)
     *           'WIDreceive_name'  =>  '',//收货人姓名
     *           'WIDreceive_address'=> '',//收货人地址//如:XX省XXX市XXX区XXX路XXX小区XXX栋XXX单元XXX号
     *           'WIDreceive_zip'   =>  '',//收货人邮编//如:123456
     *           'WIDreceive_phone' =>  '',//收货人电话号码//如:0571-88158090
     *           'WIDreceive_mobile'=>  '',//收货人手机号码//如:13312341234
     *           //确认发货 信息查询
     *           'WIDtrade_no'       =>  '',//支付宝交易号//必填
     *           //确认发货
     *           'WIDlogistics_name' =>  '',//物流公司名称//必填
     *           'WIDinvoice_no'     =>  '',//物流发货单号
     *           'WIDtransport_type' =>  '',//物流运输类型
     *           ////即使到账批量退款有密接口
     *           'WIDseller_email'   =>  '',//卖家支付宝帐户//必填//退款当天日期
     *           'WIDrefund_date'    =>  '',//必填,格式:年[4位]-月[2位]-日[2位] 小时[2位 24小时制]:分[2位]:秒[2位],如:2007-10-01 13:13:13
     *           'WIDbatch_no'       =>  '',//批次号//必填,格式:当天日期[8位]+序列号[3至24位],如:201008010000001
     *           'WIDbatch_num'      =>  '',//退款笔数//必填,参数detail_data的值中,“#”字符出现的数量加1,最大支持1000笔(即“#”字符出现的数量999个)
     *           'WIDdetail_data'    =>  '',//退款详细数据//必填,具体格式请参见接口技术文档
                 
     * );
     *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
    //双向接口和担保交易处理alipayapi
    public function alipayapi($value,$types_despatching_inquery=array('types'=>'0','deal_types'=>'1')){
        $types_i=$types_despatching_inquery['types'];
        $deal_types_i=$types_despatching_inquery['deal_types'];
        $url=$value['T_URL'];
        $alipay_config=C('alipay_config');//支付宝的alipay.config.php配置
        $parameter["partner"] = trim($alipay_config['partner']);//partner
        $parameter["_input_charset"]= trim(strtolower($alipay_config['input_charset']));//UTF8
        if ($types_i < '2'){
        $out_trade_no = $value['WIDout_trade_no'];//商户订单号//商户网站订单系统中唯一订单号,必填
        /*
         * 判断$value['WIDout_trade_no']
         */
        if($this->haplo_validate($out_trade_no,$url)){
            $parameter["out_trade_no"]=$out_trade_no;}
        }
        switch ($types_i) {
            case '0': //支付宝接口 1担保交易 2双功能接口 3即使到账
                $payment_type = "1";//支付类型//必填,不能修改
                $notify_url = C('alipay.notify_url');//服务器异步通知页面路径//需http://格式的完整路径,不能加?id=123这类自定义参数
                $return_url = C('alipay.return_url');//页面跳转同步通知页面路径//需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/
                $subject    = $value['WIDsubject'];//订单名称 //必填
                $body = $value['WIDbody'];//订单描述
                $show_url = $value['WIDshow_url'];
                if($this->haplo_validate($subject,$url)){
                    $parameter_g=array(
                        "payment_type"=>$payment_type,
                        "notify_url"=>$notify_url,
                        "return_url"=>$return_url,
                        "subject"=>$subject,
                        "body"=>$body,
                        "seller_email" => trim($alipay_config['seller_email']),
                        "show_url"=>$show_url,
                        );
                    $parameter=array_merge($parameter,$parameter_g);
                }
                switch ($deal_types_i) {
                    case '1':
                        $parameter=array_merge($this->create_trade($deal_types_i,$value),$parameter);
                        break;
                    case '2':
                        $parameter=array_merge($this->create_trade($deal_types_i,$value),$parameter);
                        break;
                    case '3':
                        /**************************即使到账**************************/
                        $total_fee = $value['WIDprice'];//付款金额//必填
                        $paymethod = $value['Paymethod'];//默认支付方式//必填
                        $defaultbank = $value['WIDdefaultbank'];//默认网银//必填,银行简码请参考接口技术文档
                        $anti_phishing_key = $value['Anti_phishing_key'];//防钓鱼时间戳//若要使用请调用类文件submit中的query_timestamp函数
                        $exter_invoke_ip =$value['EXTer_invoke_ip'];//客户端的IP地址//非局域网的外网IP地址,如:221.0.0.1
                        if($this->haplo_validate($total_fee,$url)){
                        $f_parameter = array(
                            "service" => "create_direct_pay_by_user",
                            "total_fee"    => $total_fee,
                            "paymethod"    => $paymethod,
                            "defaultbank"    => $defaultbank,
                            "anti_phishing_key"    => $anti_phishing_key,
                            "exter_invoke_ip"    => $exter_invoke_ip,
                        );
                        $parameter=array_merge($f_parameter,$parameter);
                        }
                        break;
                }
                break;
            case '1': //查询类型
                $trade_no = $value['WIDtrade_no'];//支付宝交易号//必填
                if($this->haplo_validate($trade_no,$url)){
                $f_parameter = array(
                    "service" => "single_trade_query",
                    "trade_no"    => $trade_no,
                );
                $parameter=array_merge($f_parameter,$parameter);
                }
                break;
            case '2': //确认发货
                $trade_no = $value['WIDtrade_no'];//支付宝交易号//必填
                $logistics_name = $value['WIDlogistics_name'];//物流公司名称//必填
                $invoice_no = $value['WIDinvoice_no'];//物流发货单号
                $transport_type = $value['WIDtransport_type'];//物流运输类型
                if($this->haplo_validate($trade_no,$url)){
                $f_parameter = array(
                    "service" => "send_goods_confirm_by_platform",
                    "trade_no"    => $trade_no,
                    "logistics_name"    => $logistics_name,
                    "invoice_no"    => $invoice_no,
                    "transport_type"    => $transport_type,
                );
                $parameter=array_merge($f_parameter,$parameter);
                }
                break;
            case '3'://即使到账批量退款有密接口
                /**************************即使到账批量退款有密接口**************************/
                $notify_url = C('alipay.notify_url');//服务器异步通知页面路径//需http://格式的完整路径,不允许加?id=123这类自定义参数
                $seller_email = $value['WIDseller_email'];//卖家支付宝帐户//必填//退款当天日期
                $refund_date = $value['WIDrefund_date'];//必填,格式:年[4位]-月[2位]-日[2位] 小时[2位 24小时制]:分[2位]:秒[2位],如:2007-10-01 13:13:13
                $batch_no = $value['WIDbatch_no'];//批次号//必填,格式:当天日期[8位]+序列号[3至24位],如:201008010000001
                $batch_num = $value['WIDbatch_num'];//退款笔数//必填,参数detail_data的值中,“#”字符出现的数量加1,最大支持1000笔(即“#”字符出现的数量999个)
                $detail_data = $value['WIDdetail_data'];//退款详细数据//必填,具体格式请参见接口技术文档
                
                if($this->haplo_validate($trade_no,$url) && $this->haplo_validate($refund_date,$url) && $this->haplo_validate($batch_num,$url) && $this->haplo_validate($detail_data,$url) && $this->haplo_validate($refund_date,$url)){
                   $f_parameter = array(
                                        "service" => "refund_fastpay_by_platform_pwd",
                                        "notify_url"    => $notify_url,
                                        "seller_email"    => $seller_email,
                                        "refund_date"    => $refund_date,
                                        "batch_no"    => $batch_no,
                                        "batch_num"    => $batch_num,
                                        "detail_data"    => $detail_data,
                    );
                   $parameter=array_merge($f_parameter,$parameter); 
                }
                break;
        }
        if ($types_i=='1'||$types_i=='2'){
            //建立请求
            $alipaySubmit = new \AlipaySubmit($alipay_config);
            $html_text = $alipaySubmit->buildRequestHttp($parameter);
            //解析XML
            //注意:该功能PHP5环境及以上支持,需开通curl、SSL等PHP配置环境。建议本地调试时使用PHP开发软件
            $doc = new \DOMDocument();
            $doc->loadXML($html_text);
            //请在这里加上商户的业务逻辑程序代码
            //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
            //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
            //解析XML
            if( ! empty($doc->getElementsByTagName( "alipay" )->item(0)->nodeValue) ) {
                $alipay = $doc->getElementsByTagName( "alipay" )->item(0)->nodeValue;
                echo "<meta http-equiv='content-type' content='text/html; charset=utf-8'>".$alipay;
            }
            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)
            echo "<meta http-equiv='content-type' content='text/html; charset=utf-8'>".$alipay; 
        }else{
            //建立请求
            $alipaySubmit = new \AlipaySubmit($alipay_config);
            $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确定支付");
            echo $html_text;
        }
        
    }
    //双向接口和担保交易处理
    private function create_trade($principce,$value){ 
        $price = $value['WIDprice'];//付款金额//必填
        $quantity = $value['QUAntity'];//商品数量//必填,建议默认为1,不改变值,把一次交易看成是一次下订单而非购买一件商品
        $logistics_fee = $value['Logistics_fee'];//物流费用//必填,即运费
        $logistics_type = $value['Logistics_type'];//物流类型//必填,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)
        $logistics_payment = $value['Logistics_payment'];//物流支付方式//必填,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)
        $receive_name = $value['WIDreceive_name'];//收货人姓名
        $receive_address = $value['WIDreceive_address'];//收货人地址//如:XX省XXX市XXX区XXX路XXX小区XXX栋XXX单元XXX号
        $receive_zip = $value['WIDreceive_zip'];//收货人邮编//如:123456
        $receive_phone = $value['WIDreceive_phone'];//收货人电话号码//如:0571-88158090
        $receive_mobile = $value['WIDreceive_mobile'];//收货人手机号码//如:13312341234
        if($this->haplo_validate($price,$url) && $this->haplo_validate($quantity,$url)&& $this->haplo_validate($logistics_fee,$url) && $this->haplo_validate($logistics_type,$url) && $this->haplo_validate($logistics_payment,$url)){
        $parameter = array(
            "partner" => trim($alipay_config['partner']),
            "seller_email" => trim($alipay_config['seller_email']),
            "out_trade_no"    => $out_trade_no,
            "price"    => $price,
            "quantity"    => $quantity,
            "logistics_fee"    => $logistics_fee,
            "logistics_type"    => $logistics_type,
            "logistics_payment"    => $logistics_payment,
            "receive_name"    => $receive_name,
            "receive_address"    => $receive_address,
            "receive_zip"    => $receive_zip,
            "receive_phone"    => $receive_phone,
            "receive_mobile"    => $receive_mobile,
            );
             if ($principce=='1'){//担保交易
            /**************************担保交易**************************/
               $parameter["service"] = "create_partner_trade_by_buyer";
             }else{
            /**************************双向接口**************************/
            $parameter["service"] = "trade_create_by_buyer";
           }
           return $parameter; 
        }
    }
    //必填控制判断
    private function haplo_validate($principce,$url){
        if(!$url){
            $url=__APP__;
        }
        if ($principce){
            return true;
        }else{
            $this->error('*号内容必须填写请重新填写',$url);////要跳转的url自行修改
        }
    }
    ////notify_url.php
    public function notifyurl(){
        $alipay_config=C('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'];
            if($_POST['trade_status'] == 'WAIT_BUYER_PAY') {
                //该判断表示买家已在支付宝交易管理中产生了交易记录,但没有付款
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                //如果有做过处理,不执行商户的业务程序
                echo "success";        //请不要修改或删除
                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
            }
            else if($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {
                //该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                //如果有做过处理,不执行商户的业务程序
                echo "success";        //请不要修改或删除
                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
            }
            else if($_POST['trade_status'] == 'WAIT_BUYER_CONFIRM_GOODS') {
                //该判断表示卖家已经发了货,但买家还没有做确认收货的操作
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                //如果有做过处理,不执行商户的业务程序
                echo "success";        //请不要修改或删除
                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
            }
            else if($_POST['trade_status'] == 'TRADE_FINISHED') {
                //该判断表示买家已经确认收货,这笔交易完成
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                //如果有做过处理,不执行商户的业务程序
                echo "success";//请不要修改或删除
                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
                }
            else {
                //其他状态判断
                echo "success";
                //调试用,写文本函数记录程序运行情况是否正常
                //logResult ("这里写入想要调试的代码变量值,或其他运行的结果记录");
            }//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
            }else {
            //验证失败
            echo "fail";
        }
    }
    

    /////////////return_url.php
    public function returnurl(){
        $alipay_config=C('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'];
           if($_GET['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {
               //判断该笔订单是否在商户网站中已经做过处理
               //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
               //如果有做过处理,不执行商户的业务程序
           }
           else if($_GET['trade_status'] == 'TRADE_FINISHED') {
               //判断该笔订单是否在商户网站中已经做过处理
               //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
               //如果有做过处理,不执行商户的业务程序
           }
           else {
               echo "trade_status=".$_GET['trade_status'];
           }
            echo "<meta http-equiv='content-type' content='text/html; charset=utf-8'>验证成功<br />";
            echo "支付宝订单编号=".$trade_no;
            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else {
            //验证失败
            //如要调试,请看alipay_notify.php页面的verifyReturn函数
            echo "验证失败";
        }
    }
}
?>
<?php
return array(
    //'配置项'=>'配置值'
    'DB_TYPE'               =>  'mysqli',     // 数据库类型
    'DB_HOST'               =>  ' ', // 服务器地址
    'DB_NAME'               =>  ' ',          // 数据库名
    'DB_USER'               =>  ' ',      // 用户名
    'DB_PWD'                =>  ' ',          // 密码
    'DB_PORT'               =>  '3306',        // 端口
    'DB_CHARSET'            =>  'utf8',      // 数据库编码默认采用utf8
    'DB_PREFIX'             =>  'wt_',
    'ERROR_MESSAGE'         =>  '页面错误!请稍后再试~~~',
    'SHOW_ERROR_MSG'        =>  true,
    'URL_CASE_INSENSITIVE'  =>  true,
    'LAYOUT_NO'             =>  TRUE ,
    'URL_MODEL'             =>  2,
    'alipay_config'=>array(
    'partner'              =>' ',
    'key'                  =>' ',
    'seller_email'           => ' ',
    'sign_type'            => strtoupper('MD5'),
    'input_charset'        => strtolower('utf-8'),
    'cacert'               => getcwd().'/cacert.pem',
    'transport'            => 'http',
    ),
    'alipay'              =>array(
                  //这里是异步通知页面url,提交到项目的Pay控制器的notifyurl方法;
                  'notify_url'=>'http://www.wtwk.net/index.php/home/pay/notifyurl',
                  //这里是页面跳转通知url,提交到项目的Pay控制器的returnurl方法;
                  'return_url'=>'http://www.wtwk.net/index.php/home/pay/returnurl',
                  //支付成功跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参payed(已支付列表)
                  'successpage'=>'User/myorder?ordtype=payed',
                   //支付失败跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参unpay(未支付列表)
                  'errorpage'=>'User/myorder?ordtype=unpay',
    ),
);




最佳答案
评论( 相关
后面还有条评论,点击查看>>