Thinkphp 3.2及以上版本实现支付宝担保交易、即时到账接口类、函数和使用方法
给客户开发网站时需要用到支付宝在线付款功能,小云到thinkphp网站溜了一圈,代码是有,可是都不怎么全,因此这篇文章诞生了!
本篇文章讲解了三个类的实现,担保交易、即时到账、双功能收款(该功能支付宝已下线,可给之前已申请过的站长短时间内的使用)
类文件在附件类,请自行下载文章主要讲解如何使用本类
文件下载后解压得到 PayBuy 将本文件夹放到 Think\Library\Vendor 目录下
然后在 config.PHP中配置一下信息
- 'ALIPAY_PARTNER' => '8888888888888888',//合作身份者id,以2088开头的16位纯数字
- 'ALIPAY_SELLER_EMAIL' => 'xxxxxxxxxx@163.com',//收款账号
- 'ALIPAY_KEY' => 'xxxxxxxxxxxxxxxxxxxxxxxx',//安全检验码,以数字和字母组成的32位
在 function.php 构造付款函数
第一个付款订单生成函数:
- function pay($data){
- $data['expenses'] = isset($data['expenses']) && $data['expenses'] ? $data['expenses'] : "0.00";
- $data['express'] = isset($data['express']) && $data['express'] ? $data['express'] : 'EXPRESS';
- $data['payment'] = isset($data['payment']) && $data['payment'] ? $data['payment'] : 'BUYER_PAY';
- Vendor('PayBuy.AliPay');
- $pay = new AliPay(); //实例化
- $pay->partner = C('ALIPAY_PARTNER'); //合作身份者id,以2088开头的16位纯数字
- $pay->seller_email = C('ALIPAY_SELLER_EMAIL'); //收款账号
- $pay->paykey = C('ALIPAY_KEY'); //安全检验码,以数字和字母组成的32位字符
- $pay->notify_url = $data['notify_url']; //服务器异步通知页面路径,不带参数
- $pay->return_url = $data['return_url']; //服务器同步通知页面路径,不带参数
- $pay->orderid = $data['orderid']; //必填,订单id
- $pay->subject = $data['subject']; //必填商品名称
- $pay->price = $data['price']; //必填,价格
- $pay->expenses = $data['expenses']; //必填,运费
- $pay->express = $data['express']; //必填,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)
- $pay->payment = $data['payment']; //必填,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)
- $pay->message = $data['message']; //订单描述
- $pay->show_url = $data['show_url']; //商品展示地址
- $pay->receive_name = $data['receive_name']; //收货人姓名
- $pay->receive_address = $data['receive_address']; //收货地址
- $pay->receive_zip = $data['receive_zip']; //邮编
- $pay->receive_phone = $data['receive_phone']; //收货人座机
- $pay->receive_mobile = $data['receive_mobile']; //收货人手机
- $pay->waitword = $data['waitword']; //收货人手机
- return $pay->AliPay();
- }
第二个检查订单状态函数:
- function checkpayorder($data=''){
- $alipay_config['partner'] = C('ALIPAY_PARTNER');
- $alipay_config['seller_email'] = C('ALIPAY_SELLER_EMAIL');
- $alipay_config['key'] = C('ALIPAY_KEY');
- $alipay_config['sign_type'] = strtoupper('MD5');
- $alipay_config['input_charset']= strtolower('utf-8');
- $alipay_config['transport'] = 'http';
- Vendor('PayBuy.AliPay');
- $alipayNotify = new AlipayNotify($alipay_config);
- $verify_result = $alipayNotify->verifyReturn();
- if($verify_result) {
- $out_trade_no = $data['out_trade_no'];
- $trade_no = $data['trade_no'];
- $trade_status = $data['trade_status'];
- return $data['trade_status'];
- }else {
- return "error";
- }
- }
第三函数集:(这几个函数是支付宝自带函数,请直接复制粘贴到 function.php 内)
- /*支付宝接口函数开始*/
- function createLinkstring($para) {
- $arg = "";
- while (list ($key, $val) = each ($para)) {
- $arg.=$key."=".$val."&";
- }
- //去掉最后一个&字符
- $arg = substr($arg,0,count($arg)-2);
- //如果存在转义字符,那么去掉转义
- if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
- return $arg;
- }
- function createLinkstringUrlencode($para) {
- $arg = "";
- while (list ($key, $val) = each ($para)) {
- $arg.=$key."=".urlencode($val)."&";
- }
- //去掉最后一个&字符
- $arg = substr($arg,0,count($arg)-2);
- //如果存在转义字符,那么去掉转义
- if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
- return $arg;
- }
- function paraFilter($para) {
- $para_filter = array();
- while (list ($key, $val) = each ($para)) {
- if($key == "sign" || $key == "sign_type" || $val == "")continue;
- else $para_filter[$key] = $para[$key];
- }
- return $para_filter;
- }
- function argSort($para) {
- ksort($para);
- reset($para);
- return $para;
- }
- function logResult($word='') {
- $fp = fopen("log.txt","a");
- flock($fp, LOCK_EX) ;
- fwrite($fp,"执行日期:".strftime("%Y%m%d%H%M%S",time())."\n".$word."\n");
- flock($fp, LOCK_UN);
- fclose($fp);
- }
- function getHttpResponsePOST($url, $cacert_url, $para, $input_charset = '') {
- if (trim($input_charset) != '') {
- $url = $url."_input_charset=".$input_charset;
- }
- $curl = curl_init($url);
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
- curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址
- curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
- curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
- curl_setopt($curl,CURLOPT_POST,true); // post传输数据
- curl_setopt($curl,CURLOPT_POSTFIELDS,$para);// post传输数据
- $responseText = curl_exec($curl);
- //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
- curl_close($curl);
- return $responseText;
- }
- function getHttpResponseGET($url,$cacert_url) {
- $curl = curl_init($url);
- curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
- curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
- curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址
- $responseText = curl_exec($curl);
- //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
- curl_close($curl);
- return $responseText;
- }
- function charsetEncode($input,$_output_charset ,$_input_charset) {
- $output = "";
- if(!isset($_output_charset) )$_output_charset = $_input_charset;
- if($_input_charset == $_output_charset || $input ==null ) {
- $output = $input;
- } elseif (function_exists("mb_convert_encoding")) {
- $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
- } elseif(function_exists("iconv")) {
- $output = iconv($_input_charset,$_output_charset,$input);
- } else die("sorry, you have no libs support for charset change.");
- return $output;
- }
- function charsetDecode($input,$_input_charset ,$_output_charset) {
- $output = "";
- if(!isset($_input_charset) )$_input_charset = $_input_charset ;
- if($_input_charset == $_output_charset || $input ==null ) {
- $output = $input;
- } elseif (function_exists("mb_convert_encoding")) {
- $output = mb_convert_encoding($input,$_output_charset,$_input_charset);
- } elseif(function_exists("iconv")) {
- $output = iconv($_input_charset,$_output_charset,$input);
- } else die("sorry, you have no libs support for charset changes.");
- return $output;
- }
- function md5Sign($prestr, $key) {
- $prestr = $prestr . $key;
- return md5($prestr);
- }
- function md5Verify($prestr, $sign, $key) {
- $prestr = $prestr . $key;
- $mysgin = md5($prestr);
- if($mysgin == $sign) {
- return true;
- }
- else {
- return false;
- }
- }
- /*支付宝接口函数结束*/
Thinkphp 3.2及以上版本实现支付宝担保交易、即时到账接口类、函数和使用方法的更多相关文章
- ThinkPHP整合支付宝担保交易
ThinkPHP整合支付宝担保交易本代码参考大神 http://www.thinkphp.cn/code/240.html 的思路 1.登陆支付宝后台,下载担保交易的集成包. 2.下载完成后的文件说明 ...
- PHP九大接口视频教程( 支付宝,QQ,短信接口,微信接口开发, 支付宝即时到账接口开发三级分销全套)
PHP九大接口视频教程( 支付宝,QQ,短信接口,微信接口开发, 支付宝即时到账接口开发三级分销全套) 需要的联系我:QQ: 1844912514 PHP九大接口视频教程( 支付宝,QQ,短信接口 ...
- thinkphp框架对接支付宝即时到账接口回调的代码
关于支付宝即时收款接口的对接过程,很简单,也有很多人发过,我这里就不在啰嗦了,对接完成后,在线支付成功后的回调,相对来说,是个难点,,我重点分享下我的经验. 我在开发二代旅游CMS(http://ww ...
- ThinkPHP 3.2 支付宝即时到账接口开发
前言: 一.支付流程 构造请求参数 向支付宝网关发送请求 生成支付宝页面 支付宝交易结果 二.构建支付类 1.官方即时到账文档地址: https://doc.open.alipay.com/doc2/ ...
- 支付宝即时到账接口开发 - DEMO讲解
支付宝即时到帐接口 环境要求 PHP5.0以上,且需要开启curl.openssl. 文档地址: https://doc.open.alipay.com/doc2/detail?treeId=62&a ...
- ThinkPHP整合支付宝即时到账接口调用
首先是在支付宝的蚂蚁金服开放平台下载PHP的demo: https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&a ...
- .NET MVC 支付宝支付(即时到账)
已经好久没有搞过.NET了,朋友有一个网站 ,需要接入支付宝功能,重新对接了一下. 1.开发前,需要一个企业支付宝账号登录,获取 PID和 配置密钥 官方文档:https://docs.open.al ...
- java 支付宝 第三方即时到账支付 接口
alipay 的几个内核功能文件:=================================================================================== ...
- 【网站支付PHP篇】thinkPHP集成支付宝支付(担保交易)
目录 系列说明 开发环境 部署支付宝 支付请求 支付宝返回处理 系列说明 最近在帮朋友的系统安装支付模块(兑换网站积分),现在总结一些开发心得,希望对大家有用.这个系列会讲以下第三方支付平台的集成: ...
随机推荐
- [前端笔记]第三篇:JavaScript
JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. 一.代码存放位置 J ...
- BAE 环境下 hibernate annotations 配置
annotations 配置 首先需要加入 hibernate-jpa-2.0-api-1.0.1.Final.jar 和 ejb3-persistence.jar 这两个包 ejb3-persis ...
- Sequoyah 本机开发Native Development: Invalid path for NDK(路径无效) 解决方案
打开window菜单下的preference选项.选择Android,Native Development(本地开发) 选择你的NDK安装目录. 但是,这个插件目前仅支持ndk的r4和r5版本,更高版 ...
- 使用Echarts的五个步骤
_liuz 2015-07-22 09:35:53 参考网址:http://echarts.baidu.com/doc/start.html 一.制作一个图表容器<div id="m ...
- iOS的app 中的 埋点
埋点 就是 挖个坑把 种子埋到土里 然后浇水 等待发芽 埋点就是 ,鬼子要进村,我们埋下地雷 埋点就是 小说中 作者欲扬先抑 或者欲擒故纵 设下的伏笔... 好了,用文学的手法很好的 解释了一 ...
- 如何使用SplitContainer控件[转]
原文地址:http://yinzhihua2008.blog.163.com/blog/static/794306720120511150457/ 在Windows资源管理器中,当把鼠标指针移动到Tr ...
- BZOJ 1049 数字序列
Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. Input 第一行包含一个数 ...
- BZOJ 3570 动物园
Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习 ...
- 执行计划中常见index访问方式(转)
近期有朋友对于单个表上的index各种情况比较模糊,这里对于单个表上,单个index出现的大多数情况进行了总结性测试,给出了测试结果,至于为什么出现这样的试验结果未做过多解释,给读者留下思考的空间.本 ...
- find the most comfortable road
XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Spee ...