thinkphp整合支付宝担保交易接口

通过本接口可以查询圆通快递、申通快递、ems快递、韵达快递等快递单号查询信息,无需其他额外开发,非常方便首先到www.aikuaidi.cn上注册个账号,使用key!

第一步:

复制代码 代码如下:

先下载支付宝担保交易的demo(php utf-8)。

require . '/includes/init.php');

 

if ($id = intval { $sql_select = 'SELECT consignee,mobile,tel,tracking_sn,shipping_code,shipping_name FROM '. $GLOBALS['ecs']->table." WHERE order_id=$id"; $order_info = $GLOBALS['db']->getRow;

第二步:

// 快递公司code映射 $shipping_code = array ( 'ems' => 'ems', 'ems2' => 'ems', 'sto_express' => 'zjs', 'sto_nopay' => 'zjs', 'zto' => 'zhongtong', 'sto' => 'shentong', 'yto' => 'yuantong', 'sf' => 'shunfeng', 'emssn' => 'ems', 'sf2' => 'shunfeng', 'yunda' => 'yunda', );

首先在项目Lib目录下简历自己的lib库,比如thlib;

$logistics_code = $shipping_code[$order_info['shipping_code']] ? $shipping_code[$order_info['shipping_code']] : $order_info['shipping_code']; $aikuaidi_key = 'xxxxxxx';

将alipay_notify.class.php、alipay_submit.class.php拷贝到thlib目录下;

https://www.jb51.net/article/$logistics_url = "http://www.aikuaidi.cn/rest/?key=$aikuaidi_key&order={$order_info['tracking_sn']}&id=$logistics_code&ord=asc&show=html";

 

$logistics_info = file_get_contents; //var_dump;

第三步:

//$logistics_info = iconv('gb2312', 'UTF-8', $logistics_info);

将alipay_core.function.php、alipay_md5.function.php、cacert.pem拷贝到项目的Common目录下,并在该目录下的common.php中加入如下代码:

echo <<收货人:{$order_info['consignee']} 联系电话:{$order_info['mobile']} // {$order_info['tel']} 配送:{$order_info['shipping_name']} 运单号:{$order_info['tracking_sn']}

//获取支付宝接口的配置,可以自己根据情况修改,比如partner、key等。

EOF; echo $logistics_info;

function return_alipay_config(){
/* *
* 配置文件
* 版本:3.3
* 日期:2012-07-19
* 说明:
* 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
* 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。

echo "

* 提示:如何获取安全校验码和合作身份者id
* 1.用您的签约支付宝账号登录支付宝网站(www.alipay.com)
* 2.点击“商家服务”(https://b.alipay.com/order/myorder.htm)
* 3.点击“查询合作者身份(pid)”、“查询安全校验码(key)”

点我点我"; //exit;}

* 安全校验码查看时,输入支付密码后,页面呈灰色的现象,怎么办?
* 解决方法:
* 1、检查浏览器配置,不让浏览器做弹框屏蔽设置
* 2、更换浏览器或电脑,重新登录查询。
*/

//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//合作身份者id,以2088开头的16位纯数字
$alipay_config['partner'] = '2088402103732808';

//安全检验码,以数字和字母组成的32位字符
$alipay_config['key'] = 'cpykdfpz5r0jdnbv5l1nqwcn4iikpnen';

//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

//签名方式 不需修改
$alipay_config['sign_type'] = strtoupper('MD5');

//字符编码格式 目前支持 gbk 或 utf-8
$alipay_config['input_charset']= strtolower('utf-8');

//ca证书路径地址,用于curl中ssl校验
//请保证cacert.pem文件在当前文件夹目录中
$alipay_config['cacert'] = dirname(__FILE__).'\cacert.pem';

//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
$alipay_config['transport'] = 'http';
return $alipay_config;
}

//应用支付宝提供的支付有关的公用方法

require_once("alipay_core.function.php");
require_once("alipay_md5.function.php");

至此已经配好了这个支付宝接口,然后在控制器中就能够运用了。现在支付的控制器中引入支付接口的lib库,可在构造函数中引入。

/**
*构造函数
*
*@author Julian
*/
protected function _initialize() {
import("@.thlib.alipay_submit");
import("@.thlib.alipay_notify");
//parent::_initialize();
$this->checkLogin();
}

 

然后支付的方法:

/**
*用支付宝付款,调用接口进行付款
*
*@author Julian
*/
public function pay(){
header("Content-type:text/html;charset=utf-8");
$alipay_config = return_alipay_config();   //common中新增的获取配置的公用方法
/**************************请求参数**************************/
$order_id = $_GET['order_id'];
if(!$order_id){
$this->error('订单号不能为空!');
die();
}
//获取订单信息。
$order_info = M('order_list')->where(array('order_id'=>$order_id))->find();
if(!$order_info){
$this->error('不存在此订单');
die();
}
//var_dump($order_info);
//算出总价格。
//$length = count($order_info);
$all_money = $order_info['price'];
// for ($i=0; $i < $length; $i++) {
// $all_money += $order_info[$i]['product_num']*$order_info[$i]['product_price'];
// }
//echo $all_money;
//获取收货地址信息.
$address_info = M('buyer_address')->where(array('buyer_id'=>$_SESSION['users']['uid'],'is_default'=>1))->find();
if(!$address_info){
$this->error('请设置收货地址信息',U('center/index'));
}
//var_dump($address_info);
// die();
//支付类型
$payment_type = "1";
//必填,不能修改
//服务器异步通知页面路径
$notify_url = get_domain().U('pay/notify_url');
//需http://格式的完整路径,不能加?id=123这类自定义参数

//页面跳转同步通知页面路径
$return_url = get_domain().U('pay/return_url');
//需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/
//卖家支付宝帐户
$seller_email = '18767135924';
//必填

//商户订单号
$out_trade_no = $order_id;
//商户网站订单系统中唯一订单号,必填

//订单名称
$subject = $order_id;
//必填

//付款金额
$price = $all_money;
//必填

//商品数量
$quantity = "1";
//必填,建议默认为1,不改变值,把一次交易看成是一次下订单而非购买一件商品
//物流费用
$logistics_fee = "0.00";
//必填,即运费
//物流类型
$logistics_type = "EXPRESS";
//必填,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)
//物流支付方式
$logistics_payment = "SELLER_PAY";
//必填,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)
//订单描述
// $logistics_fee_1 = "0.00";
// //必填,即运费
// //物流类型
// $logistics_type_1 = "EMS";
// //必填,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)
// //物流支付方式
// $logistics_payment_1 = "BUYER_PAY";

$body = $order_id;
//商品展示地址
$show_url = get_domain().U('order/index');
//需以http://开头的完整路径,如:http://www.xxx.com/myorder.html

//收货人姓名
$receive_name = $address_info['receive_name'];
//如:张三

//收货人地址
$receive_address = $address_info['address'];
//如:XX省XXX市XXX区XXX路XXX小区XXX栋XXX单元XXX号

//收货人邮编
$receive_zip = $address_info['postcode'];
//如:123456

//收货人电话号码
$receive_phone = $address_info['telphone'];
//如:0571-88158090

//收货人手机号码
$receive_mobile = $address_info['telphone'];
//如:13312341234
金沙官网线上,/************************************************************/

//构造要请求的参数数组,无需改动
$parameter = array(
"service" => "create_partner_trade_by_buyer",
"partner" => trim($alipay_config['partner']),
"payment_type" => $payment_type,
"notify_url" => $notify_url,
"return_url" => $return_url,
"seller_email" => $seller_email,
"out_trade_no" => $out_trade_no,
"subject" => $subject,
"price" => $price,
"quantity" => $quantity,
"logistics_fee" => $logistics_fee,
"logistics_type" => $logistics_type,
"logistics_payment" => $logistics_payment,
// "logistics_fee_1" => $logistics_fee_1,
// "logistics_type_1" => $logistics_type_1,
// "logistics_payment_1" => $logistics_payment_1,
"body" => $body,
"show_url" => $show_url,
"receive_name" => $receive_name,
"receive_address" => $receive_address,
"receive_zip" => $receive_zip,
"receive_phone" => $receive_phone,
"receive_mobile" => $receive_mobile,
"_input_charset" => trim(strtolower($alipay_config['input_charset']))
);

//var_dump($parameter);die();
//建立请求
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
echo $html_text;
}

//支付宝服务器异步通知页面

/* *
* 功能:支付宝服务器异步通知页面
* 版本:3.3
* 日期:2012-07-23
* 说明:
* 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
* 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。

*************************页面功能说明*************************
* 创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。
* 该页面不能在本机电脑测试,请到服务器上做测试。请确保外部可以访问该页面。
* 该页面调试工具请使用写文本函数logResult,该函数已被默认关闭,见alipay_notify_class.php中的函数verifyNotify
* 如果没有收到该页面返回的 success 信息,支付宝会在24小时内按一定的时间策略重发通知
*/
public function notify_url(){
$alipay_config = return_alipay_config();
//计算得出通知验证结果
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();

if($verify_result) {//验证成功
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//请在这里加上商户的业务逻辑程序代

//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

//商户订单号

本文由金沙官网线上发布于编程,转载请注明出处:thinkphp整合支付宝担保交易接口

您可能还会对下面的文章感兴趣: