ThinkPHP 5如何接入支付宝支付功能
2017-11-17 00:00
549 查看
如何实现支付宝支付功能
做电商网站的朋友都知道在线支付功能是必不可少的,作为现在线上支付巨头“支付宝支付”,“微信支付”是一个电商网站的标配。今天我们就来一起学习一下在thinkphp5 中“支付宝即时支付”是如何实现。这里我们以WSTMart开源B2B2C系统为例来分享:在thinkphp5 中如何接入支付宝功能。
首先你要开通支付宝商户号,
登录蚂蚁金服开发平台创建应用,并签约电脑网站支付
将商户信息配置到系统中
以上准备工作做好了,我们来看看代码是如何实现的:
在wstmart\home\controller\Alipays.php 支付宝控制器中,首生会初始化获取到配置信息
/**
初始化
*/
private $aliPayConfig;
public function _initialize() {
$this->aliPayConfig = array();
$m = new M();
$this->aliPayConfig = $m->getPayment("alipays");
}
接下来会通过getAlipaysUrl()方法来是组建调起支付宝所需要的参数,并通过返回一个json数组将数据传到页面,然后跳转url,调起支付宝进行支付
/**
生成支付代码
/
function getAlipaysUrl(){
这里代码省略…
if($data["status"]==1){
$return_url = url("home/alipays/response","",true,true);
$notify_url = url("home/alipays/aliNotify","",true,true);
$parameter = array(
'extra_common_param'=> $extra_common_param,//扩展参数
'service' => 'create_direct_pay_by_user',
'partner' => $this->aliPayConfig['parterID'],
'_input_charset' => "utf-8",
'notify_url' => $notify_url,
'return_url' => $return_url,
/ 业务参数 /
'subject' => $subject,
'body' => $body,
'out_trade_no' => $out_trade_no,
'total_fee' => $orderAmount,
'quantity' => 1,
'payment_type' => 1,
/ 物流参数 /
'logistics_type' => 'EXPRESS',
'logistics_fee' => 0,
'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE',
/ 买卖双方信息 */
'seller_email' => $this->aliPayConfig['payAccount']
);
ksort($parameter);
reset($parameter);
$param = '';
$sign = '';
foreach ($parameter AS $key => $val){
$param .= "$key=" .urlencode($val). "&";
$sign .= "$key=$val&";
}
$param = substr($param, 0, -1);
$sign = substr($sign, 0, -1). $this->aliPayConfig['parterKey'];
$url = 'https://mapi.alipay.com/gateway.do?'.$param. '&sign='.md5($sign).'&sign_type=MD5';
$data["url"] = $url;
}
return $data;
}
当用户支付完成后,支付宝会异步调用商户网站回调地址,WSTMart的回调地址是“home/alipays/aliNotify”,在aliNotify中会通过notify方法对支付宝进行签名验证,验证通过后再对订单状态进行改变。【注:回调地址中不能出现“xxx?xx=1”这样的带参url】
/**
支付回调验证接口
*/
function notify($request){
$returnRes = array('info'=>'','status'=>false);
$request = $this->argSort($request);
// 检查数字签名是否正确
$isSign = $this->getSignVeryfy($request);
if (!$isSign){//签名验证失败
$returnRes['info'] = '签名验证失败';
return $returnRes;
}
if ($request['trade_status'] == 'TRADE_SUCCESS' || $request['trade_status'] == 'TRADE_FINISHED'){
$returnRes['status'] = true;
}
return $returnRes;
}
验证成功后就是商户网站对订单逻辑的处理了,这里就不多说了,希望对大家有所帮助!!
做电商网站的朋友都知道在线支付功能是必不可少的,作为现在线上支付巨头“支付宝支付”,“微信支付”是一个电商网站的标配。今天我们就来一起学习一下在thinkphp5 中“支付宝即时支付”是如何实现。这里我们以WSTMart开源B2B2C系统为例来分享:在thinkphp5 中如何接入支付宝功能。
首先你要开通支付宝商户号,
登录蚂蚁金服开发平台创建应用,并签约电脑网站支付
将商户信息配置到系统中
以上准备工作做好了,我们来看看代码是如何实现的:
在wstmart\home\controller\Alipays.php 支付宝控制器中,首生会初始化获取到配置信息
/**
初始化
*/
private $aliPayConfig;
public function _initialize() {
$this->aliPayConfig = array();
$m = new M();
$this->aliPayConfig = $m->getPayment("alipays");
}
接下来会通过getAlipaysUrl()方法来是组建调起支付宝所需要的参数,并通过返回一个json数组将数据传到页面,然后跳转url,调起支付宝进行支付
/**
生成支付代码
/
function getAlipaysUrl(){
这里代码省略…
if($data["status"]==1){
$return_url = url("home/alipays/response","",true,true);
$notify_url = url("home/alipays/aliNotify","",true,true);
$parameter = array(
'extra_common_param'=> $extra_common_param,//扩展参数
'service' => 'create_direct_pay_by_user',
'partner' => $this->aliPayConfig['parterID'],
'_input_charset' => "utf-8",
'notify_url' => $notify_url,
'return_url' => $return_url,
/ 业务参数 /
'subject' => $subject,
'body' => $body,
'out_trade_no' => $out_trade_no,
'total_fee' => $orderAmount,
'quantity' => 1,
'payment_type' => 1,
/ 物流参数 /
'logistics_type' => 'EXPRESS',
'logistics_fee' => 0,
'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE',
/ 买卖双方信息 */
'seller_email' => $this->aliPayConfig['payAccount']
);
ksort($parameter);
reset($parameter);
$param = '';
$sign = '';
foreach ($parameter AS $key => $val){
$param .= "$key=" .urlencode($val). "&";
$sign .= "$key=$val&";
}
$param = substr($param, 0, -1);
$sign = substr($sign, 0, -1). $this->aliPayConfig['parterKey'];
$url = 'https://mapi.alipay.com/gateway.do?'.$param. '&sign='.md5($sign).'&sign_type=MD5';
$data["url"] = $url;
}
return $data;
}
当用户支付完成后,支付宝会异步调用商户网站回调地址,WSTMart的回调地址是“home/alipays/aliNotify”,在aliNotify中会通过notify方法对支付宝进行签名验证,验证通过后再对订单状态进行改变。【注:回调地址中不能出现“xxx?xx=1”这样的带参url】
/**
支付回调验证接口
*/
function notify($request){
$returnRes = array('info'=>'','status'=>false);
$request = $this->argSort($request);
// 检查数字签名是否正确
$isSign = $this->getSignVeryfy($request);
if (!$isSign){//签名验证失败
$returnRes['info'] = '签名验证失败';
return $returnRes;
}
if ($request['trade_status'] == 'TRADE_SUCCESS' || $request['trade_status'] == 'TRADE_FINISHED'){
$returnRes['status'] = true;
}
return $returnRes;
}
验证成功后就是商户网站对订单逻辑的处理了,这里就不多说了,希望对大家有所帮助!!
相关文章推荐
- ThinkPHP 5如何接入支付宝支付功能
- ThinkPHP接入支付宝支付功能
- ThinkPHP接入支付宝支付功能
- ThinkPHP接入支付宝支付功能
- PHP如何实现支付宝即时到账功能-thinkphp架构
- 2017安卓开发接入支付宝支付功能详解,真正做到完全翻译支付宝sdk开发应用
- thinkphp框架中的支付宝支付功能简单介绍
- Woocomerce接入支付宝支付功能(一)——创建应用以及请求支付
- 互联网产品接入支付功能如何测试?
- ThinkPHP5.0 实现支付宝支付功能(app端)
- 如何完成支付宝的支付功能?
- 2017安卓开发接入支付宝支付功能详解,真正做到完全翻译支付宝sdk开发应用
- Android接入支付宝实现支付功能
- 接入支付宝支付功能思路总结
- 如何完成支付宝的支付功能?
- ThinkPHP5.0 实现 app支付宝支付功能
- ThinkPHP5.0 实现 app支付宝支付功能
- iOS接入支付宝(支付功能)
- iOS APP接入支付宝SDK支付功能的实现(小白篇)
- Android接入支付宝实现支付功能