WSTMart在线客服
x
WSTMartQQ客服 QQ客服
服务热线

020-85289921

服务邮箱

wstmart@qq.com

WSTMart公众号二维码
新闻资讯
020-85289921
广州市天河北燕岭路燕侨大厦1708室

WSTMart三级分销系统是怎么接入支付宝支付的

发表于 2017-11-17 17:50:02     浏览:322


WSTMart三级分销系统为例分享支付宝支付是如何接入thinkphp5框架的


        做电商网站的朋友都知道在线支付功能是必不可少的,作为现在线上支付巨头“支付宝支付”,“微信支付”是一个电商网站的标配。今天我们就来一起学习一下在thinkphp5 中“支付宝即时支付”是如何实现。这里我们以WSTMart三级分销系统为例来讲解一下:

 

1.       首先你在支付宝开通支付宝商户号,

2.       登录蚂蚁金服开发平台创建应用,并签约电脑网站支付


3.       将商户信息配置到系统中



以上准备工作做好了,我们来看看WSTMart三级分销系统代码是如何实现的:

wstmart\home\controller\Alipays.php 支付宝控制器中,首生会初始化获取到配置信息

/**

* 初始化

*/

private $aliPayConfig;

public function _initialize() {

$this->aliPayConfig = array();

$m = new M();

$this->aliPayConfig = $m->getPayment("alipays");

}

 

接下来会通过WSTMart三级分销系统的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;

}

验证成功后就是商户网站对订单逻辑的处理了,WSTMart三级分销系统在这里就不多说了,希望对大家有所帮助!!