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

下载地址传送门 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. //合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
  2. $alipay_config['partner'] = '';
  3.  
  4. //收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号
  5. $alipay_config['seller_id'] = $alipay_config['partner'];
  6.  
  7. // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
  8. $alipay_config['key'] = '';
  9.  
  10. // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
  11. $alipay_config['notify_url'] = "http://商户网址/create_direct_pay_by_user-PHP-UTF-8/notify_url.php";
  12.  
  13. // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
  14. $alipay_config['return_url'] = "http://商户网址/create_direct_pay_by_user-PHP-UTF-8/return_url.php";
  15.  
  16. //签名方式
  17. $alipay_config['sign_type'] = strtoupper('MD5');
  18.  
  19. //字符编码格式 目前支持 gbk 或 utf-8
  20. $alipay_config['input_charset']= strtolower('utf-8');
  21.  
  22. //ca证书路径地址,用于curl中ssl校验
  23. //请保证cacert.pem文件在当前文件夹目录中
  24. $alipay_config['cacert'] = getcwd().'\\cacert.pem';
  25.  
  26. //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
  27. $alipay_config['transport'] = 'http';
  28.  
  29. // 支付类型 ,无需修改
  30. $alipay_config['payment_type'] = "1";
  31.  
  32. // 产品类型,无需修改
  33. $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 中方便我们的使用

  1. function subPayment($tradeNo, $amount, $subject, $body="")
  2. {
  3. $alipayConfig = C('ALIPAY_CONFIG');
  4. //发起请求时的参数
  5. $requestParam = $alipayConfig;
  6. $requestParam['out_trade_no'] = $tradeNo;
  7. $requestParam['subject'] = $subject;
  8. $requestParam['total_fee'] = $amount;
  9. $requestParam['body'] = $body;
  10. $requestParam['_input_charset'] = trim(strtolower($alipayConfig['input_charset']));
  11.  
  12. vendor('Alipay/lib/alipay_submit','','.class.php');
  13. $alipaySubmitObj = new \AlipaySubmit($alipayConfig);
  14. $htmlText = $alipaySubmitObj->buildRequestForm($requestParam, "get", "确定");
  15. echo $htmlText;
  16. }

3内部控制器的调用

  1. subPayment($orderData['order_no'], $orderData['amount'], NOW_TIME.'支付测试', NOW_TIME.'支付描述');
  2. //参数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. }

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

  1. Mac支付宝插件风波

    1.前言 首先我喜欢看一些创业的书,很多书里都会有马云的身影,马云也算是对我有一定的影响,从而我对淘宝也产生了一定的好感.但是关于这次插件事情,我对阿里产生了一些排斥的心里作用.我并不想吐槽淘宝,也不 ...

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

    一.简介 nop通过插件机制可以支持更多的支付扩展,我们通过编写支持退款的支付宝插件来更好的理解支付插件的扩展. 先分享下支付宝插件源码点击下载,由于时间原因,本篇只介绍使用该插件,下一篇结合插件进行 ...

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

    一.回顾 支付宝插件源码下载地址:点击下载 上篇介绍了使用支付宝插件进行支付,全额退款,部分退款还有插件的多店铺配置,本文介绍下如何实现的. 二.前期准备 插件主要有3个功能: 多店铺插件配置 支付功 ...

  4. KoaHub平台基于Node.js开发的Koa 连接支付宝插件代码信息详情

    KoaHub平台基于Node.js开发的Koa 链接支付宝插件代码信息详情 easy-alipay alipay payment & notification APIs easy-alipay ...

  5. 最新zencart支付宝插件(支持1.5)

    最新zencart支付宝插件(支持1.5) 最新zencart支付宝插件(支持1.5)   支付宝接口的兼容性真不错,时至今日还能用,想利用zencart来做国内时长还真是方便多了,朋友们可以试试. ...

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

    近期客户提出要开发一个IOS上的app作为訪问他们站点的途径之中的一个.为什么说之中的一个呢.因为眼下PC和Mobile这两个站眼下都已经上线了. 所以问题就简单了,我们仅仅须要把mobile站UI改 ...

  7. TP5 中实现支付宝支付 利用model层调用支付宝类库

    <?php /** * Created by PhpStorm. * User: admin * Date: 2017/8/16 * Time: 09:16 */ namespace app\a ...

  8. ThinkPHP 3.2.2跨控制器调用方法

     所谓跨控制器调用,指的是在一个控制器中调用另一个控制器的某个方法.在ThinkPHP中有三种方式实现跨控制器调用: 直接实例化: A()函数实例化; R()函数实例化. (1)直接实例化  直接实例 ...

  9. 如何在 静态编译的QT 5.5.1 中 使用数据库插件连接 ODBC(调用静态插件)

    前段时间由于工作的关系,需要编写一个将数据插入到 Sql server 2012 的桌面软件. 由于之前使用的是MFC,偶然间接触到了Qt后,被它的简洁惊艳到了,于是便毅然而然的转投到了Qt的怀抱,哈 ...

随机推荐

  1. 安全性测试入门 (五):Insecure CAPTCHA 验证码绕过

    本篇继续对于安全性测试话题,结合DVWA进行研习. Insecure Captcha不安全验证码 1. 验证码到底是怎么一回事 这个Captcha狭义而言就是谷歌提供的一种用户验证服务,全称为:Com ...

  2. asp.net5中程序根目录的获取

    最近在写一个asp.net5的应用,其中要实现的一个功能是生成一个文件,并且存储到应用程序根目录(这里指project.json所在的文件夹)下的export文件夹下.生成文件内容什么的都做好了,忽然 ...

  3. .net中Response.End() 和Response.Redirect("http://dotnet.aspx.cc");

    问:什么情况下需要Response.End()语句,加这句有什么好处 答: 首先你要理解Response.End()的意思,它的意思是终止执行下面的语句!但有时不加和加上都一样,但还要加上好,为什么呢 ...

  4. java中调用ElasticSearch中文分词ik没有起作用

    问题描述: 项目中已经将'齐鲁壹点'加入到扩展词中,但是使用客户端调用的时候,高亮显示还是按照单个文字分词的: 解决方案: 1.创建Mapping使用的分词使用ik 2.查询使用QueryBuilde ...

  5. WPF使用Aspose.Words导出Word文档

    一.创建Word文档模板 分析需要导出的word文档,将固定的内容和由程序生成的内容分开; 创建一个word(例如:Template.doc)文档,将固定的内容按照一定的格式写入当前文档中; 打开Te ...

  6. Ubuntu上安装Samba服务器实现家庭共享

    如何在Ubuntu上安装Samba服务器 大多数Linux发行版都包含Samba. 要在Ubuntu上安装Samba,只需运行: sudo apt install samba 要检查您的Samba版本 ...

  7. table-列组

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. PHP的模板引擎smarty原理浅谈

    mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有ph ...

  9. hihoCoder #1044 : 状态压缩·一 (清垃圾)

    题意: 某车厢有一列座位,共有n个位置,清洁工要在这n个位置上清垃圾,但是不能全部位置都清理,只能选择部分.选择的规则是,连续的m个位置内,不能够清理超过q个,也就是说从第1~m个位置最多可以清q个, ...

  10. JavaScript getMonth() 方法

    应该特别注意的是Js中getMonth()这个方法的返回值: 定义和用法: getMonth() 方法可返回表示月份的数字. 返回值: dateObject 的月份字段,使用本地时间.返回值是 0(一 ...