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三级分销系统在这里就不多说了,希望对大家有所帮助!!

marttype加载到word中不能用_WSTMart三级分销系统是怎么接入支付宝支付的相关推荐

  1. python变量区变量保存与加载_python – Flask:使用全局变量将数据文件加载到内存中...

    我有一个大的 XML文件,它被打开,加载到内存中,然后由 Python类关闭.简化示例如下所示: class Dictionary(): def __init__(self,filename): f ...

  2. html页面判断其他div为空,将外部html加载到div中 - 页面加载然后变为空白

    我确信这将会变成一件愚蠢的事情,但是自从我成为JavaScript noob以来,这里就变成了一件愚蠢的事情.将外部html加载到div中 - 页面加载然后变为空白 我想外部HTML内容加载到我的索引 ...

  3. SoapUI利用Groovy把外部数据加载到request中

    默认已经用Groovy把外部数据给读取出来了,关键是读取出来后,如何加载到request中去?这里提供了两种方法: 1.该Groovy脚本的名称是"setUp" def num = ...

  4. 开机启动加载驱动过程中调用PostMessage函数出错

    今天在WINCE5.0+S3C2440系统调试检测出租车是否载客的驱动的时候遇到这样的问题: 发现在开机启动加载驱动过程中调用PostMessage函数时会导致调用的线程崩溃,比如如果下面的线程在创建 ...

  5. 在.NET2.0中如何更简单的使用委托将方法加载到事件中去

    我们知道在System命名空间中,.NET为我们提供了EventHandler的委托,它的原型是delegate void EventHandler(object sender,EventArgs e ...

  6. java中的类加载器有,Java自定义的类加载器,java自定义加载,在java中类加载器有以...

    Java自定义的类加载器,java自定义加载,在java中类加载器有以 在java中类加载器有以下几种java虚拟机自带的加载器 1)根类加载器(Bootstrap,c++实现)2)扩展类加载器(Ex ...

  7. linux文件 内存映射 锁,linux – mmap:将映射文件立即加载到内存中吗?

    不,是的,也许吧.这取决于. 调用mmap通常只意味着对应用程序而言,映射文件的内容将映射到其地址空间,就像文件已加载到那里一样.或者,好像该文件确实存在于内存中,就好像它们是同一个(包括更改被写回磁 ...

  8. 中yeti不能加载_将 PQ 查询加载到 Excel 中进行分析的三种常用的方式

    点击上方蓝字 关注星标★不迷路 岁月本长,忙者自促 虽然大部分时候经过PQ清洗的数据都是加载到Excel工作表中,但是PQ中还有另外两种将数据返回Excel中进行分析的方法. 三种不同的数据加载方式: ...

  9. spring预加载与懒加载_通过Spring将继承树加载到List中

    spring预加载与懒加载 我注意到有趣的Spring功能. 我的一位同事使用它将Spring Bean的整个继承树加载到列表中. 在学习Spring文档时错过了这一点. 让我们来看看Spring b ...

最新文章

  1. Linux常用指令---ps(查看进程)
  2. 基于python的快速傅里叶变换FFT(一)
  3. RAP、Mock.js、Vue.js、Webpack
  4. Opengl-帧缓冲(一个新的缓冲对象,想一下深度和模板缓冲)
  5. Failed to bind NettyServer on /192.168.**.*:20880, cause: Failed to bind to: /0.0.0.0:20880
  6. linux应用开发:日志记录
  7. 通信原理速学02:随机过程
  8. [课程相关]homework-06
  9. 【C++深度剖析教程40】使用数值型模板技术计算1+2+3+...+N的值
  10. Spring 5的最终功能发行版即将来临
  11. PAT乙级 1061 判断题
  12. java iso-8859-1_如何在Java中的ISO-8859-1和UTF-8之间转换?
  13. openlayers添加按钮_OpenLayers3加载常用控件使用方法详解
  14. 远程桌面连接-GPU加速
  15. 数学建模:层次分析法实例以及代码
  16. Cocos2dx-lua组件tableView的简单用法
  17. 液压传动理论教学实训
  18. APP日志的抓取方法——转载
  19. 计算机可以谭音乐吗,谭晶怎么被叫谭哈哈 《歌手》谭晶演唱什么歌曲
  20. bilibili自动上传视频脚本(纯ruby)

热门文章

  1. 界面组件——按钮(Button)与图片按钮(ImageButton)
  2. java转码及页面乱码原因分析
  3. [Azure]经典模式下关于云服务配置多个VIP的使用说明
  4. APS高级计划排程(生产计划排产)系统的算法规则和异常处理策略
  5. 15.学习Camera之——camera理论基础和工作原理
  6. 解决:provider:Named Pipes Provider error:40无法打开SQL Server的连接
  7. 阿里物联网平台的使用
  8. 新手入门人工智能领域的历程 --干货
  9. 关关于android 微信sdk 分享 图片 到 朋友圈 的问题
  10. TypeError: invalid destination position for blit