给客户开发网站时需要用到支付宝在线付款功能,小云到thinkphp网站溜了一圈,代码是有,可是都不怎么全,因此这篇文章诞生了!

本篇文章讲解了三个类的实现,担保交易、即时到账、双功能收款(该功能支付宝已下线,可给之前已申请过的站长短时间内的使用)

类文件在附件类,请自行下载文章主要讲解如何使用本类

文件下载后解压得到 PayBuy 将本文件夹放到 Think\Library\Vendor 目录下

然后在 config.PHP中配置一下信息

  1. 'ALIPAY_PARTNER'            =>     '8888888888888888',//合作身份者id,以2088开头的16位纯数字
  2. 'ALIPAY_SELLER_EMAIL'        =>     'xxxxxxxxxx@163.com',//收款账号
  3. 'ALIPAY_KEY'                =>     'xxxxxxxxxxxxxxxxxxxxxxxx',//安全检验码,以数字和字母组成的32位

在  function.php  构造付款函数

第一个付款订单生成函数:

  1. function pay($data){
  2. $data['expenses']    = isset($data['expenses']) && $data['expenses'] ? $data['expenses'] : "0.00";
  3. $data['express']    = isset($data['express']) && $data['express'] ? $data['express'] : 'EXPRESS';
  4. $data['payment']    = isset($data['payment']) && $data['payment'] ? $data['payment'] : 'BUYER_PAY';
  5. Vendor('PayBuy.AliPay');
  6. $pay = new AliPay(); //实例化
  7. $pay->partner             =    C('ALIPAY_PARTNER');        //合作身份者id,以2088开头的16位纯数字
  8. $pay->seller_email         =    C('ALIPAY_SELLER_EMAIL');    //收款账号
  9. $pay->paykey             =    C('ALIPAY_KEY');            //安全检验码,以数字和字母组成的32位字符
  10. $pay->notify_url        =    $data['notify_url'];        //服务器异步通知页面路径,不带参数
  11. $pay->return_url        =    $data['return_url'];        //服务器同步通知页面路径,不带参数
  12. $pay->orderid            =    $data['orderid'];            //必填,订单id
  13. $pay->subject            =    $data['subject'];            //必填商品名称
  14. $pay->price                =    $data['price'];                //必填,价格
  15. $pay->expenses            =    $data['expenses'];            //必填,运费
  16. $pay->express            =    $data['express'];            //必填,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)
  17. $pay->payment            =    $data['payment'];            //必填,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)
  18. $pay->message            =    $data['message'];            //订单描述
  19. $pay->show_url            =    $data['show_url'];            //商品展示地址
  20. $pay->receive_name        =    $data['receive_name'];        //收货人姓名
  21. $pay->receive_address    =    $data['receive_address'];    //收货地址
  22. $pay->receive_zip        =    $data['receive_zip'];        //邮编
  23. $pay->receive_phone        =    $data['receive_phone'];        //收货人座机
  24. $pay->receive_mobile    =    $data['receive_mobile'];    //收货人手机
  25. $pay->waitword            =    $data['waitword'];            //收货人手机
  26. return $pay->AliPay();
  27. }

第二个检查订单状态函数:

  1. function checkpayorder($data=''){
  2. $alipay_config['partner']        = C('ALIPAY_PARTNER');
  3. $alipay_config['seller_email']    = C('ALIPAY_SELLER_EMAIL');
  4. $alipay_config['key']            = C('ALIPAY_KEY');
  5. $alipay_config['sign_type']    = strtoupper('MD5');
  6. $alipay_config['input_charset']= strtolower('utf-8');
  7. $alipay_config['transport']    = 'http';
  8. Vendor('PayBuy.AliPay');
  9. $alipayNotify = new AlipayNotify($alipay_config);
  10. $verify_result = $alipayNotify->verifyReturn();
  11. if($verify_result) {
  12. $out_trade_no = $data['out_trade_no'];
  13. $trade_no = $data['trade_no'];
  14. $trade_status = $data['trade_status'];
  15. return $data['trade_status'];
  16. }else {
  17. return "error";
  18. }
  19. }

第三函数集:(这几个函数是支付宝自带函数,请直接复制粘贴到 function.php 内)

    1. /*支付宝接口函数开始*/
    2. function createLinkstring($para) {
    3. $arg  = "";
    4. while (list ($key, $val) = each ($para)) {
    5. $arg.=$key."=".$val."&";
    6. }
    7. //去掉最后一个&字符
    8. $arg = substr($arg,0,count($arg)-2);
    9. //如果存在转义字符,那么去掉转义
    10. if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
    11. return $arg;
    12. }
    13. function createLinkstringUrlencode($para) {
    14. $arg  = "";
    15. while (list ($key, $val) = each ($para)) {
    16. $arg.=$key."=".urlencode($val)."&";
    17. }
    18. //去掉最后一个&字符
    19. $arg = substr($arg,0,count($arg)-2);
    20. //如果存在转义字符,那么去掉转义
    21. if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
    22. return $arg;
    23. }
    24. function paraFilter($para) {
    25. $para_filter = array();
    26. while (list ($key, $val) = each ($para)) {
    27. if($key == "sign" || $key == "sign_type" || $val == "")continue;
    28. else    $para_filter[$key] = $para[$key];
    29. }
    30. return $para_filter;
    31. }
    32. function argSort($para) {
    33. ksort($para);
    34. reset($para);
    35. return $para;
    36. }
    37. function logResult($word='') {
    38. $fp = fopen("log.txt","a");
    39. flock($fp, LOCK_EX) ;
    40. fwrite($fp,"执行日期:".strftime("%Y%m%d%H%M%S",time())."\n".$word."\n");
    41. flock($fp, LOCK_UN);
    42. fclose($fp);
    43. }
    44. function getHttpResponsePOST($url, $cacert_url, $para, $input_charset = '') {
    45. if (trim($input_charset) != '') {
    46. $url = $url."_input_charset=".$input_charset;
    47. }
    48. $curl = curl_init($url);
    49. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
    50. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
    51. curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址
    52. curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
    53. curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
    54. curl_setopt($curl,CURLOPT_POST,true); // post传输数据
    55. curl_setopt($curl,CURLOPT_POSTFIELDS,$para);// post传输数据
    56. $responseText = curl_exec($curl);
    57. //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
    58. curl_close($curl);
    59. return $responseText;
    60. }
    61. function getHttpResponseGET($url,$cacert_url) {
    62. $curl = curl_init($url);
    63. curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
    64. curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
    65. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
    66. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
    67. curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址
    68. $responseText = curl_exec($curl);
    69. //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
    70. curl_close($curl);
    71. return $responseText;
    72. }
    73. function charsetEncode($input,$_output_charset ,$_input_charset) {
    74. $output = "";
    75. if(!isset($_output_charset) )$_output_charset  = $_input_charset;
    76. if($_input_charset == $_output_charset || $input ==null ) {
    77. $output = $input;
    78. } elseif (function_exists("mb_convert_encoding")) {
    79. $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
    80. } elseif(function_exists("iconv")) {
    81. $output = iconv($_input_charset,$_output_charset,$input);
    82. } else die("sorry, you have no libs support for charset change.");
    83. return $output;
    84. }
    85. function charsetDecode($input,$_input_charset ,$_output_charset) {
    86. $output = "";
    87. if(!isset($_input_charset) )$_input_charset  = $_input_charset ;
    88. if($_input_charset == $_output_charset || $input ==null ) {
    89. $output = $input;
    90. } elseif (function_exists("mb_convert_encoding")) {
    91. $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
    92. } elseif(function_exists("iconv")) {
    93. $output = iconv($_input_charset,$_output_charset,$input);
    94. } else die("sorry, you have no libs support for charset changes.");
    95. return $output;
    96. }
    97. function md5Sign($prestr, $key) {
    98. $prestr = $prestr . $key;
    99. return md5($prestr);
    100. }
    101. function md5Verify($prestr, $sign, $key) {
    102. $prestr = $prestr . $key;
    103. $mysgin = md5($prestr);
    104. if($mysgin == $sign) {
    105. return true;
    106. }
    107. else {
    108. return false;
    109. }
    110. }
    111. /*支付宝接口函数结束*/

Thinkphp 3.2及以上版本实现支付宝担保交易、即时到账接口类、函数和使用方法的更多相关文章

  1. ThinkPHP整合支付宝担保交易

    ThinkPHP整合支付宝担保交易本代码参考大神 http://www.thinkphp.cn/code/240.html 的思路 1.登陆支付宝后台,下载担保交易的集成包. 2.下载完成后的文件说明 ...

  2. PHP九大接口视频教程( 支付宝,QQ,短信接口,微信接口开发, 支付宝即时到账接口开发三级分销全套)

    PHP九大接口视频教程(  支付宝,QQ,短信接口,微信接口开发, 支付宝即时到账接口开发三级分销全套) 需要的联系我:QQ: 1844912514 PHP九大接口视频教程(  支付宝,QQ,短信接口 ...

  3. thinkphp框架对接支付宝即时到账接口回调的代码

    关于支付宝即时收款接口的对接过程,很简单,也有很多人发过,我这里就不在啰嗦了,对接完成后,在线支付成功后的回调,相对来说,是个难点,,我重点分享下我的经验. 我在开发二代旅游CMS(http://ww ...

  4. ThinkPHP 3.2 支付宝即时到账接口开发

    前言: 一.支付流程 构造请求参数 向支付宝网关发送请求 生成支付宝页面 支付宝交易结果 二.构建支付类 1.官方即时到账文档地址: https://doc.open.alipay.com/doc2/ ...

  5. 支付宝即时到账接口开发 - DEMO讲解

    支付宝即时到帐接口 环境要求 PHP5.0以上,且需要开启curl.openssl. 文档地址: https://doc.open.alipay.com/doc2/detail?treeId=62&a ...

  6. ThinkPHP整合支付宝即时到账接口调用

    首先是在支付宝的蚂蚁金服开放平台下载PHP的demo: https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&a ...

  7. .NET MVC 支付宝支付(即时到账)

    已经好久没有搞过.NET了,朋友有一个网站 ,需要接入支付宝功能,重新对接了一下. 1.开发前,需要一个企业支付宝账号登录,获取 PID和 配置密钥 官方文档:https://docs.open.al ...

  8. java 支付宝 第三方即时到账支付 接口

    alipay 的几个内核功能文件:=================================================================================== ...

  9. 【网站支付PHP篇】thinkPHP集成支付宝支付(担保交易)

    目录 系列说明 开发环境 部署支付宝 支付请求 支付宝返回处理 系列说明 最近在帮朋友的系统安装支付模块(兑换网站积分),现在总结一些开发心得,希望对大家有用.这个系列会讲以下第三方支付平台的集成: ...

随机推荐

  1. 用urlencode(String str)对URL传递参数进行编码,提高安全

    在PHP 提交地址后面带有参数的时候,参数会在浏览器的地址栏暴露无疑,这样是不安全的,这个时候就必须用些方法对这些参数进行安全处理 这里可以用 urlencode(String URL);//对URL ...

  2. ios入门之c语言篇——基本函数——2——判断闰年

    2.闰年判断 参数返回值解析: 参数: a:int,年份: 返回值: 1:闰年: 0:非闰年: int leapyear(int a) { ==) { ; } ==) { ; } ==) { ; } ...

  3. Ext.js form 表单提交问题

    var form = new Ext.form.FormPanel({ labelAlign : 'right', border : false, bodyStyle : 'background-co ...

  4. Android Wear开发 - 数据通讯 - 第四节 : 数据封装(解决不能序列化问题)

    一. 前言 背景 一开始笔者在研究数据发送与接收的时候,看到Wear数据类DataMap除了可以put基本类型外,还有个fromBundle方法来构建一个DataMap对象.所以一口气的将原本功能上的 ...

  5. aix ipcs使用说明

    ipcs: -q   Writes information about active message queues -o             Writes the following usage ...

  6. java学习进制转换之查表法

    10进制转16进制,以及10进制转2进制,还有10进制转8进制,这些转换如果按照常规思路的话,会灰常的麻烦. 我们来看一下 10进制转16进制: 假如这里有一个十进制数字:35,我们的需求就是把这个3 ...

  7. 阿里巴巴算法工程师四面(三轮技术+hr面)详细面经

    阿里面试总结: 一遍一遍地刷阿里网站,今天发现“面试中”变成“待跟进offer”了,写个面经攒人品,希望offer通知邮件早点来吧. 我当时投简历时投了C/C++工程师,其实也没经过啥考虑,因为我一开 ...

  8. Power Strings - POJ 2406(求循环节)

    题目大意:叙述的比较高大上,其实就是一个字符串B = AAAAAAA,求出来这个A最短有多长   分析:注意如果这个串不是完全循环的,那么循环节就是就是它本身.   代码如下: #include< ...

  9. G - Supermarket poj1456

    题目的描述很长,其实描述的问题很简单,说有n的商品,它们每个的价值是pi,但是呢,再过di天这些商品就不能卖了(有可能过期了...),现在给出来每个商品的价值和可以卖的最后期限,问可以得到最多多少资金 ...

  10. 实现一个servlet的helloworld小程序(不适用Eclipse)

    实现一个servlet的helloworld小程序(不适用Eclipse) 1. 在tomcat中的webapps下建一个应用程序FirstServlet(C:\tomcat\webapps\Firs ...