Thinkphp 支付宝插件的引入 和调用

本文版权归本宝宝所有 未得允许不得转载

下载地址传送门 https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.twLYka&treeId=62&articleId=103566&docType=1

1 文件 demo 的下载  后 选择 md5版本或者是RDA版本    我这儿选择MD5版本  php utf8  版本    更改一下 文件名

2 文件的放入 在 Thinkphp/library/vendor

二 : 关键点技术分析

1 配置参数的 分析 于讲解

  找到alipay.config.php


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

//合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm

$alipay_config[‘partner‘]       = ‘‘;

//收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号

$alipay_config[‘seller_id‘] = $alipay_config[‘partner‘];

// MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm

$alipay_config[‘key‘]           = ‘‘;

// 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问

$alipay_config[‘notify_url‘] = "http://商户网址/create_direct_pay_by_user-PHP-UTF-8/notify_url.php";

// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问

$alipay_config[‘return_url‘] = "http://商户网址/create_direct_pay_by_user-PHP-UTF-8/return_url.php";

//签名方式

$alipay_config[‘sign_type‘]    = strtoupper(‘MD5‘);

//字符编码格式 目前支持 gbk 或 utf-8

$alipay_config[‘input_charset‘]= strtolower(‘utf-8‘);

//ca证书路径地址,用于curl中ssl校验

//请保证cacert.pem文件在当前文件夹目录中

$alipay_config[‘cacert‘]    = getcwd().‘\\cacert.pem‘;

//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http

$alipay_config[‘transport‘]    = ‘http‘;

// 支付类型 ,无需修改

$alipay_config[‘payment_type‘] = "1";

        

// 产品类型,无需修改

$alipay_config[‘service‘] = "create_direct_pay_by_user";

通过 查看 这些 基本配置参数 我们 可以将参数 配置到config.php文件中

 1 ‘ALIPAY_CONFIG‘ => array(
 2         ‘partner‘ => ‘‘,  //身份信息 (必填)
 3         ‘seller_id‘ => ‘‘,  //id  (必填)
 4         ‘key‘ => ‘‘,      //key值(必填)
 5         ‘notify_url‘ => ‘‘, //必须是外网可以访问到的地址
 6         ‘return_url‘ => ‘‘,  //支付宝返回后的同步跳转地址
 7         ‘sign_type‘ => strtoupper(‘MD5‘),  
 8         ‘input_charset‘ => strtolower(‘utf-8‘),
 9         ‘transport‘ => ‘http‘,
10         ‘cacert‘ => VENDOR_PATH.‘Alipay/cacert.pem‘,
11         ‘payment_type‘ => ‘1‘,
12         ‘service‘ => ‘create_direct_pay_by_user‘,
13         ‘anti_phishing_key‘ => ‘‘,  //钓鱼 可以不填写
14         ‘exter_invoke_ip‘ => ‘‘,    //可以不填写
15     ),

2 php方法的写入 可以放入 function 中方便我们的使用

function subPayment($tradeNo, $amount, $subject, $body="")
{
    $alipayConfig = C(‘ALIPAY_CONFIG‘);
    //发起请求时的参数
    $requestParam = $alipayConfig;
    $requestParam[‘out_trade_no‘] = $tradeNo;
    $requestParam[‘subject‘] = $subject;
    $requestParam[‘total_fee‘] = $amount;
    $requestParam[‘body‘] = $body;
    $requestParam[‘_input_charset‘] = trim(strtolower($alipayConfig[‘input_charset‘]));

    vendor(‘Alipay/lib/alipay_submit‘,‘‘,‘.class.php‘);
    $alipaySubmitObj = new \AlipaySubmit($alipayConfig);
    $htmlText = $alipaySubmitObj->buildRequestForm($requestParam, "get", "确定");
    echo $htmlText;
}

3内部控制器的调用

subPayment($orderData[‘order_no‘], $orderData[‘amount‘], NOW_TIME.‘支付测试‘, NOW_TIME.‘支付描述‘);
            //参数1 生成 唯一的编号  参数2 金额  参数3: 支付的subject 参数 4 支付描述信息

4 根据返回结果信息做相应的更改  创建一个控制器

①支付宝返回同步地址的体现

 1 private $_config;
 2     private $_notifyObj;
 3     function _initialize(){
 4         vendor(‘Alipay/lib/alipay_notify‘,‘‘,‘.class.php‘);
 5         $this->_config = C(‘ALIPAY_CONFIG‘);
 6         $this->_notifyObj = new \AlipayNotify($this->_config);
 7     }
 8     //同步的通知地址
 9     public function returnUrl()
10     {
11         $checkResult = $this->_notifyObj->verifyReturn();
12         if ($checkResult) {
13             if ($_GET[‘is_success‘] == "T" && $_GET[‘trade_status‘] == "TRADE_SUCCESS") {
14                 $this->success(‘对订单‘.$_GET[‘out_trade_no‘].‘支付成功‘,U(‘User/index‘));
15                 return;
16             }else{
17                 $this->error(‘支付失败,请进订单中心查看!‘);
18                 return;
19             }
20         }else{
21             $this->error(‘支付通知验证失败,请联系管理员!‘);
22             return;
23         }
24     }

②异步地址的修改 ps:必须在外网才能够生效 成功 后必须echo "success" 这个字符串 否则支付宝监听不到 会在24小时20分钟一直提醒

 1  //异步的通知地址
 2     public function notifyUrl()
 3     {
 4         $checkResult = $this->_notifyObj->verifyNotify();
 5         if ($checkResult) {
 6             $tradeStatus = $_POST[‘trade_status‘];
 7             $outTradeNo = $_POST[‘out_trade_no‘];
 8             $tradeNo = $_POST[‘trade_no‘];
 9             if ($tradeStatus == "TRADE_SUCCESS") {
10                 $orderData = D(‘Order‘)->where(array(‘order_no‘=>$outTradeNo))->find();
11                 if (empty($orderData)) {
12                     M(‘log‘)->add(array(
13                         ‘ser_type‘ => 1,
14                         ‘code‘ => ‘ORDER_EXC‘,
15                         ‘ser_data‘ => serialize(array(‘order_no‘=>$outTradeNo,‘trade_no‘=>$tradeNo)),
16                         ‘create_time‘=>NOW_TIME,
17                     ));
18                     exit;
19                 }
20
21                 if ($orderData[‘status‘] != 0) {
22                     M(‘log‘)->add(array(
23                         ‘ser_type‘ => 2,
24                         ‘code‘ => ‘ORDER_EXC‘,
25                         ‘ser_data‘ => serialize(array(‘order_no‘=>$outTradeNo,‘trade_no‘=>$tradeNo))
26                     ));
27                     exit;
28                 }
29
30                 D(‘Order‘)->where(array(‘order_no‘=>$outTradeNo))->save(array(‘status‘=>1));
31
32                 echo "success";
33             }else{
34                 D(‘Order‘)->where(array(‘order_no‘=>$outTradeNo))->save(array(‘status‘=>2));
35             }
36         }else{
37             echo "fail";
38         }
39
40     }

时间: 2024-10-23 22:06:31

Thinkphp 支付宝插件的引入 和调用的相关文章

nopCommerce 3.9 大波浪系列 之 可退款的支付宝插件(上)

一.简介 nop通过插件机制可以支持更多的支付扩展,我们通过编写支持退款的支付宝插件来更好的理解支付插件的扩展. 先分享下支付宝插件源码点击下载,由于时间原因,本篇只介绍使用该插件,下一篇结合插件进行代码分析.       注意:测试时将项目部署在公网,这样才能接收来自支付宝的回调通知,否则无法接收支付宝回调会导致订单状态无法处理. 二.插件使用 1.将插件DaBoLang.Nop.Plugin.Payments.AliPay项目放置在"nopCommerce_3.90_Source\Plugi

从支付宝插件无提示导入根证书带来的安全隐患说开去:谈谈HTTPS的加密方式

众所周知在12306购票,官方说明需要导入根证书,这算是良心的了.其实你安装了支付宝插件,就会被不知情的导入了某些[哔]的根证书,而这会带来一些安全隐患:提升遭遇中间人攻击的可能性:在你完全不知情,以为自己还在享受这HTTPS带来的安全保护的情况下,将未加密的信息完全暴露给第三方(比如GFW).而根证书是什么?为什么可能导入一个证书就可能会遭到中间人攻击的?我们从头说开去~ 一.基本概念 加密: 未加密信息:明文x 加密后信息:密文y 明文到密文之间的转换关系:y=f(x),而解密则是x=f -

nopCommerce 3.9 大波浪系列 之 可退款的支付宝插件(下)

一.回顾 支付宝插件源码下载地址:点击下载 上篇介绍了使用支付宝插件进行支付,全额退款,部分退款还有插件的多店铺配置,本文介绍下如何实现的. 二.前期准备 插件主要有3个功能: 多店铺插件配置 支付功能 退款功能 数据库支持: 新增dbl_PaymentInfo表保存支付记录. 新增dbl_RefundInfo表保存退款记录. 其他准备: 支付宝即时到账PID和MD5秘钥Key,可通过支付宝开放平台获取. 三.流程规划 插件安装卸载流程 2.  支付流程 3.  退款流程 四.创建项目 1. 

支付宝插件

支付宝插件  2016年11月的时候支付宝进行了一次更新,支付宝的SDK升级到2.0版本.以前在app中使用支付宝进行支付叫做移动支付,11月之后更名为APP支付. 1 根据支付宝的说明文档的建议,为保证安全,签名都放到后端去做,前端只需要接收后台传入签名字符串,使用该插件调用支付宝SDK完成支付 2 APP_ID:对应开放平台中应用的APPID,主要用于iOS平台xcode构建URL Schemes 使用Android 和iOS 插件安装: cordova plugin add cordova

支付宝移动支付之IOSApp调用支付宝钱包

最近客户提出要开发一个IOS上的app作为访问他们网站的途径之一,为什么说之一呢,因为目前PC和Mobile这两个站目前都已经上线了. 所以问题就简单了,我们只需要把mobile站UI修改一下,然后在根据客户的新需求修改下程序,之后把这个站套个IOS的壳子就可以了. 那么问题来了,我们的mobile支付的时候调用的是支付宝的网页支付,这个页面是支付宝的,我们没办法修改,所以如果套在壳子里继续使用这种支付方式会有点不伦不类的感觉,所以我们就决定调用支付宝钱包,也就是支付宝客户端. 下面是我参考支付

配置Android插件并使用unity调用

方法一:发布eclipse android工程(如图勾选),如同IOS发布xcode一样,在eclipse中编写调用 方法二:使用eclipse发布插件在unity中调用 eclipse中配置要点: 操作过程: 1.新建Android工程,注意包路径比如我的是com.zxkj,cyy,其他步骤直接下一步完成 2.右击Android工程项目导入unity 安装包中.class.jar包 Unity安装包中路径:Uniy\Editor\Data\PlaybackEngines\androidplay

thinkphp 支付宝错误 Class 'Think' not found

Class 'Think' not found D:\www\DonatePlatform\ThinkPHP\Extend\Vendor\alipay\lib\alipay_submit.class.php 第 29 行. 经过仔细排查发现alipay_submit.class.php中 这个方法 function AlipaySubmit($alipay_config) {   $this->__construct($alipay_config);  }方法名称与类名称相同,其实下面的办法是为

Ecshop支付宝插件SQL注入及漏洞利用(exp)

 0x00 在\includes\modules\payment\alipay.php文件中,有一个response函数用来处理支付信息,在ECSHOP的init初始化文件中,默认是做了全局转义的,而这个漏洞的精髓在于绕过全局转义. 在$order_sn = str_replace($_GET['subject'], '', $_GET['out_trade_no']);  中,使用str_replace函数对$_GET[out_trade_no]中的内容进行替换,替换内容和原字符串都是可控

wex5 实战 加密与解密系列(1) DES算法引入与调用

作为web前端应用来说,与服务器通讯或后端通讯,以及不同用户间传递数据,在一些特定情况下需要对一些信息进行加密传输,在某个事件中取出信息并解密,得到正确的信息.纵观不同语言和不同算法,有很多种选择.今天,从最基础的加密与解密算法DES说起,深入浅出,看看wex5如何简单高效的实现DES算法加密与解密.便于课程需要,制作了demo,及js改装注释. 一 效果演示 如图所示,加密,生成一堆乱码,解密还原得到正确信息. 二 设计思路 制作并引入des.js文件,前端直接调用js方法实现加密解密. 三