担保交易我试了好使 谁能帮我试试 双向接口 和即时到账 还有 确认发货 和即时到账批量退款有密接口 这些接口好不好使呢
<?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',
),
);



最佳答案