ThinkPHP3.2对接开发支付宝即时到帐接口
ThinkPHP3.2对接开发支付宝即时到帐接口
在做一些商城、自动发卡网站、会员积分充值、金币充值等等这类网站都时候,我们极大可能需要使用到第三方都支付接口、不管是财付通、支付宝、银联、贝
宝、易宝这些都好,总之这些第三方支付平台给我们带来了很多便利都地方。我们只需要跟这些平台合作给予部分手续费(个人表示支付宝贵贵的)。我们只需要针
对这些平台一次开发就可以使用多个银行都支付了,还有一些平台支持游戏卡和电话卡都,我们不再需要去繁琐都跟每一个银行签约然后[/code]针对每一个
银行开发一次,这些平台为我们大大都节省了很多时间。
博客原文:http://www.sunnyos.com/article-show-50.html(带有视频播放)
今天我就给一个自动发货网站添加支付宝都即时到帐接口程序,实现在线自助购买,跟其他平台都操作流程基本一致
E3C97FC0-A543-4F09-8682-ED56D1BC7D3D.png
都是商户那边准备好请求数据,然后提交给第三方支付平台,第三方支付平台在处理完客户付款之后,就会回调我们提交过去都回调地址,然后我们根据回调回来都信息进行处理。基本都是这么一个流程就完了,有一些平台可能需要多次握手才进行真正都数据处理。
支付宝即时到帐接口重要文件:
lib┈┈类文件夹
alipay_core.function.php┈┈支付宝接口公用函数文件
alipay_notify.class.php┈┈支付宝通知处理类文件
alipay_submit.class.php┈┈支付宝各接口请求提交类文件
alipay_md5.function.php┈┈支付宝接口MD5函数文件
log.txt┈┈日志文件
cacert.pem ┈┈用于CURL中校验SSL的CA证书文件
下载了官方都sdk之后最重要都是保存这几个文件,因为我们主要就是使用这几个文件,提交数据和同步还有异步回调我们可以通过自己写,或者复制官方都sdk集成到自己方法中。
我都目录结构是:
Extend-----专门存放第三方扩展类库都文件夹
Payment-----存放支付类库都
Alipay-----支付宝接口类库
Alipay.php-----自己修改了官方sdk都alipayapi.php文件做成都静态类
cacert.pem-----这个文件很重要,因为需要用来校验信息
lib-----类文件夹
alipay_core.function.php┈┈支付宝接口公用函数文件
alipay_notify.class.php┈┈支付宝通知处理类文件
alipay_submit.class.php┈┈支付宝各接口请求提交类文件
alipay_md5.function.php┈┈支付宝接口MD5函数文件
大
家都知道ThinkPHP是可以通过大C方法来获取参数都,所以我把一些信息写到了配置文件里面去在Common/Conf/alipay.php里面,
单独写文件的时候千万别忘了在config.php里面使用LOAD_EXT_CONFIG来加载这个支付宝都配置文件进去,否则大C将会获取不到信息。
我的流程是,先在本站创建订单,把订单信息写到订单表,然后把信息提交到支付宝,再通过回调处理付款结果。
ThinkPHP3.2之后支持了命名空间,所以我把官方类库都两个文件修改了一下添加了命名空间。
在alipay_notify.class.php┈┈支付宝通知处理类文件和alipay_submit.class.php┈┈支付宝各接口请求提交类文件添加这个命名空间,具体命名空间请根据自己实际情况调整
- namespace Extend\Payment\Alipay;
自己修改都官方sdk信息提交类库Alipay.php,这个类请根据自己实际情况编写
<?phpnamespace Extend\Payment\Alipay;class Alipay{public static function pay($alipay_config,$args){/**************************请求参数**************************///支付类型$payment_type = "1";//必填,不能修改//服务器异步通知页面路径$notify_url = $args['notify_url'];//需http://格式的完整路径,不能加?id=123这类自定义参数//页面跳转同步通知页面路径$return_url = $args['return_url'];//需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost///商户订单号$out_trade_no = $args['out_trade_no'];//商户网站订单系统中唯一订单号,必填//订单名称$subject = $args['name'];//必填//付款金额$total_fee = $args['total'];//必填//订单描述$body = $args['content'];//商品展示地址$show_url = $args['show_url'];//需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html//防钓鱼时间戳$anti_phishing_key = "";//若要使用请调用类文件submit中的query_timestamp函数//客户端的IP地址$exter_invoke_ip = "";//非局域网的外网IP地址,如:221.0.0.1/************************************************************///构造要请求的参数数组,无需改动$parameter = array("service" => "create_direct_pay_by_user","partner" => trim($alipay_config['partner']),"seller_email" => trim($alipay_config['seller_email']),"payment_type" => $payment_type,"notify_url" => $notify_url,"return_url" => $return_url,"out_trade_no" => $out_trade_no,"subject" => $subject,"total_fee" => $total_fee,"body" => $body,"show_url" => $show_url,"anti_phishing_key" => $anti_phishing_key,"exter_invoke_ip" => $exter_invoke_ip,"_input_charset" => trim(strtolower($alipay_config['input_charset'])));//建立请求$alipaySubmit = new AlipaySubmit($alipay_config);$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");echo $html_text;}}
处理下单提交数据给支付宝的方法首先要先在这个方法的类导入命名空间和引入文件
use \Extend\Payment\Alipay as Alipay;//导入命名空间并取Alipay别名import('Extend.Payment.Alipay.Alipay',$_SERVER['DOCUMENT_ROOT'],'.php');import('Extend.Payment.Alipay.lib.alipay_notify',$_SERVER['DOCUMENT_ROOT'],'.class.php');import('Extend.Payment.Alipay.lib.alipay_submit',$_SERVER['DOCUMENT_ROOT'],'.class.php');
对于命名空间有不理解的可以观看《关于PHP命名空间的声明和使用》这篇博文和观看视频。
提交方法dobuy方法提交数据到支付宝的代码
// 提交数据给支付宝,这里都数据参数根据自己修改都官方sdk来传递,根据实际情况为准$baseurl = 'http://'.$_SERVER['HTTP_HOST'];$args = array('out_trade_no'=>$out_trade_no,// 商户订单号'notify_url'=>$baseurl.'/index.php/Home/Index/notifyurl.html',// 异步跳转处理'return_url'=>$baseurl.'/index.php/Home/Index/returnurl.html',// 同步跳转处理'name'=>$row['name'],// 订单名称'total'=>$row['price'],// 订单金额'content'=>'测试描述',// 订单描述'show_url'=>$baseurl,// 商品展示地址);Alipay\Alipay::pay(C('alipay'),$args);//通过命名空间别名调用提交信息都方法并且传入配置信息和提交都信息
信息提交到支付宝之后,当客户进行支付完成都操作,支付宝就会开始回调我们都处理方法,我们可以在设置回调这里改变订单都状态
return同步跳转
// 同步跳转public function returnurl(){$alipay_config = C('alipay');//计算得出通知验证结果$alipayNotify = new Alipay\AlipayNotify($alipay_config);$verify_result = $alipayNotify->verifyReturn();if($verify_result) {//验证成功//商户订单号$out_trade_no = $_GET['out_trade_no'];//支付宝交易号$trade_no = $_GET['trade_no'];//交易状态$trade_status = $_GET['trade_status'];if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {// 下面是处理订单信息都代码,根据$out_trade_no商户订单号获取订单信息然后更改订单状态$order = M('order');$row = $order->where(array('number'=>$out_trade_no))->find();if($row){if($order->where(array('id'=>$row['id']))->save(array('status'=>1))){$this->assign('row',$row);$this->display('buy_success');}else{$this->error('错误');}}else{$this->error('错误');}}else {echo "trade_status=".$_GET['trade_status'];}echo "验证成功<br />";}else {//验证失败//如要调试,请看alipay_notify.php页面的verifyReturn函数echo "验证失败";}}
notify异步回调
// 异步跳转public function notifyurl(){$alipay_config = C('alipay');//计算得出通知验证结果$alipayNotify = new Alipay\AlipayNotify($alipay_config);$verify_result = $alipayNotify->verifyNotify();if($verify_result) {//验证成功$out_trade_no = $_POST['out_trade_no'];//支付宝交易号$trade_no = $_POST['trade_no'];//交易状态$trade_status = $_POST['trade_status'];if($_POST['trade_status'] == 'TRADE_FINISHED'||$_POST['trade_status'] == 'TRADE_SUCCESS') {// 下面是处理订单信息都代码,根据$out_trade_no商户订单号获取订单信息然后更改订单状态$order = M('order');$row = $order->where(array('number'=>$out_trade_no))->find();if($row){if($order->where(array('id'=>$row['id']))->save(array('status'=>1))){echo "success";}else{echo "fail";}}else{echo "fail";}}echo "success"; //请不要修改或删除}else {//验证失败echo "fail";//调试用,写文本函数记录程序运行情况是否正常//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");}}
上面代码已经完整了整个支付都功能,大家最好不好直接复制过去就用,这种东西重在理解,大家可以参考我的代码然后再去看看官方的文档,这样下次就算不看文章也都能做出来支付功能了。本站特色就是博文和视频一起来,看不懂博文请看视频。
谢谢大家对本博客的支持,本站专注原创技术文章,请尊重原创,杜绝百度上面出现的各种一模一样的帖子,让我们一起努力做更优质的文章。且看且珍惜博主的心得。请转载带上本文链接注明出处。
如果大家有什么疑问可以加我QQ327388905进行解答,也可以加入交流群
群二维码
支付宝接口代码.zip( 149.37 KB 下载:44 次 )
ThinkPHP3.2对接开发支付宝即时到帐接口的更多相关文章
- 支付宝即时到帐接口的python实现,演示样例採用django框架
因工作须要研究了支付宝即时到帐接口.并成功应用到站点上,把过程拿出来分享. 即时到帐仅仅是支付宝众多商家服务中的一个,表示客户付款,客户用支付宝付款.支付宝收到款项后,立即通知你,而且此笔款项与交易脱 ...
- PHP九大接口视频教程( 支付宝,QQ,短信接口,微信接口开发, 支付宝即时到账接口开发三级分销全套)
PHP九大接口视频教程( 支付宝,QQ,短信接口,微信接口开发, 支付宝即时到账接口开发三级分销全套) 需要的联系我:QQ: 1844912514 PHP九大接口视频教程( 支付宝,QQ,短信接口 ...
- 微信支付宝个人免签约即时到帐接口开发附demo
支付界面: 扫码支付界面: 付成功后可以跳转到你程序指定的地址! demo: http://likeyunba.com/WeChat-Pay/
- 关于支付宝即时到帐异步通知(notify_url)一点总结
(1)首先做支付的商业网站,需要能够上网(支付成功后,需要进行参数回传验证,如果上不了网,responseText就直接为false)(2)notify_url这个不能进行验证,比如继承父类Page, ...
- java 支付宝即时到帐提交订单dome
package com.tian.batis; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; imp ...
- 支付宝即时到账交易接口C#接入方式的几个坑
1.在官方文档中 https://docs.open.alipay.com/62/104743 可以清楚看到input_charset前面没有要求加下横杠,可是请求示例是带着的.经过实验得知,这个必须 ...
- 支付宝即时到账接口开发 - DEMO讲解
支付宝即时到帐接口 环境要求 PHP5.0以上,且需要开启curl.openssl. 文档地址: https://doc.open.alipay.com/doc2/detail?treeId=62&a ...
- PHP 接入支付宝即时到账功能
首先请到支付宝那边申请一个及时到账的接口账户,需要提交相关材料申请.然后根据即时到账的API文档进行接入.API文档提供了各种语言版本的demo,我这里是下的php版demo,然后再进行相关修改操作. ...
- ***CodeIgniter框架集成支付宝即时到账支付SDK
本文为CI集成支付宝即时到账支付接口 1.下载支付宝官方demo ;即时到账交易接口(create_direct_pay_by_user)(DEMO下载) 原文地址:https://doc.open. ...
随机推荐
- 【poj2459】 Feed Accounting
http://poj.org/problem?id=2459 (题目链接) 题意 一堆不知何时运到的草料原有F1 kg,在第D天被牛吃成F2 kg,每头牛在[l,r]吃草料,每天吃1kg.求草料是什么 ...
- wpf数据绑定
前段: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.c ...
- 数据结构算法C语言实现(十二)--- 3.4循环队列&队列的顺序表示和实现
一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 //3_4_part1.h /** ...
- jquery的$
<!DOCTYPE HTML> <HTML> <head> <title>aa</title> <script type=" ...
- 重新认识unicode和utf8编码
重新认识unicode和utf8编码 直到今天,准确的说是刚才,我才知道UTF-8编码和Unicode编码是不一样的,是有区别的囧 他们之间是有一定的联系的,看看他们的区别: UTF-8的长度是不一定 ...
- CentOS禁用触摸板
安装xorg-x11-apps包 yum install xorg-x11-apps 查看设备信息 cd /dev/input/ ls //找到触摸板信息 xinput list //找到触摸板的id ...
- hihocoder #1327
传送门 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个只包含小写字母'a'-'z'的字符串 S ,你需要将 S 中的字符重新排序,使得任意两个相同的字符不连在一 ...
- 《JavaScript权威指南》学习笔记 第一天。
这是零零散散的笔记,作为自己看书打demo的笔记.不足为各位学习,留作自己复习知识点备用. 1.检测对象中某个属性存在不存在: <script> // in 运算符 //不管是对象的自有属 ...
- HTML中<meta>标签如何正确使用
HTML中<meta>标签如何正确使用 如果我们在浏览器中按下F12或者Ctrl+shift+J,便可以打开开发者工具,在element中即可看到<head>元素中有不少< ...
- JQuery------获取<input type="file">中的文件内容
html <div class="File">添加附件</div><input id="upfile" name="up ...