支付宝接口开发集成支付环境小结


Posted in PHP onMarch 17, 2015

关于支付宝的接口集成气死是很简单,目前大概有3种类型,即时到帐、双功能、担保交易,只需要集成一次担保交易,其他的比如即时到帐集成很容易,担保交易的状态有几种,比如:是否支付成功,卖家是否发货,买家确认收获等。而即时到帐只有一种,就是是否已付款!最多还有个退款的功能。一般都没用到。

    通过之前做项目:配资平台,有个预付费的功能,用到了支付宝的双功能收款,其实就是提供两种付款方式,即时到帐和担保交易。一般买家谨慎会选择担保。

    下面说下具体的集成过程,第一:下载对应的集成接口包,比如即时到帐就下载即时到帐,担保下载担保,非常不建议将即时到帐修改成担保或者反之。案例中我下载的 双功能接口文件,utf8-php接口。

    下载来的文件都大同小异,即时到帐和担保的文件也相差不大,反正可以肯定的说,只要配置一次担保支付宝接口,就能配置即时到帐。

    我们需要修改的文件有如下:alipay.config.php[配置文件,只是用于修改配置接口开发者id和key]

    alipayapi.php[主调文件,将需要发送的post数据交给该文件,然后负责跳转到支付页面]
    index.php[demo演示页面,可以不做修改,但是其中传递的参数名陈需要看懂]
    notify_url.php 返回数据页面,在其中将返回交易的状态,更具状态我们可以更改数据库订单信息,该文件是通过post方式接受。
    return_url.php 返回数据页面,在其中将返回交易的状态,更具状态我们可以更改数据库订单信息,该文件是通过GET方式。

    具体过程:

    第一步,修改配置信息:

   $alipay_config['partner']       = 'xxx8511073xxxxxxxx';

   //安全检验码,以数字和字母组成的32位字符

   $alipay_config['key']           ='xxxxxxxxnow07oajbflskxxxxxxxxxx';

 
     第二:拼post数据,一般只需要修改请求参数
 /**************************请求参数**************************/

         //支付类型

         $payment_type = "1";

         //必填,不能修改

         //服务器异步通知页面路径

         $notify_url = "http://你的域名/alipay/notify_url.php";

         //需http://格式的完整路径,不能加?id=123这类自定义参数

         //页面跳转同步通知页面路径

         $return_url = "http://你的域名/alipay/return_url.php";

         //需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/

         //卖家支付宝帐户

         $seller_email = $_POST['WIDseller_email'];//demo[index.php]传过来的

         //必填

         //商户订单号

         $out_trade_no = $_POST['WIDout_trade_no'];//传过来的

         //商户网站订单系统中唯一订单号,必填

         //订单名称

         $subject = $_POST['WIDsubject'];//同上

         //必填

         //付款金额

         $price = $_POST['WIDprice'];//传过来的,是你的表单中填写的值

         //必填

         //商品数量

         $quantity = "1";

         //必填,建议默认为1,不改变值,把一次交易看成是一次下订单而非购买一件商品

         //物流费用

         $logistics_fee = "0.00";

         //必填,即运费

         //物流类型

         $logistics_type = "EXPRESS";

         //必填,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)

         //物流支付方式

         $logistics_payment = "SELLER_PAY";

         //必填,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)

         //订单描述

         $body = $_POST['WIDbody'];

         //商品展示地址

         $show_url = $_POST['WIDshow_url'];

         //需以http://开头的完整路径,如:http://www.ya-jing.cn

         //收货人姓名

         $receive_name = '萤火';

         //如:张三

         //收货人地址

         $receive_address = $_POST['WIDreceive_address'];

         //如:XX省XXX市XXX区XXX路XXX小区XXX栋XXX单元XXX号

         //收货人邮编

         $receive_zip = $_POST['WIDreceive_zip'];

         //如:123456

         //收货人电话号码

         $receive_phone = $_POST['WIDreceive_phone'];

         //如:0571-88158090

         //收货人手机号码

         $receive_mobile = $_POST['WIDreceive_mobile'];

         //如:13312341234

 
     第三:数据构造完成后就可以在页面上付款,测试能不能正确的打开支付页面。如果能打开,这时候就可以进行付款了,但是买家付款的状态我们还无法获知,比如有没有成功付款,卖家是否已经发货等。那么接下来开始做返回状态的业务逻辑处理。

打开return_url.php文件,根据提示修改,做对因的处理。

 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

     //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

     //商户订单号 $out_trade_no = $_GET['out_trade_no'];

     //支付宝交易号    $trade_no = $_GET['trade_no'];

     //交易状态

     $trade_status = $_GET['trade_status'];

     if($_GET['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {//状态为成功

     //处理自己网站的业务逻辑

         if(!$order['status']){//判断本地数据库中的订单是否已经处理

             db_update("stx_recharge",array("status"=>1),array("oid"=>$_GET

 ['out_trade_no']));//如果没处理就将状态改成已经处理。

             //金钱的增加

             $zd = db_line("stx_terminal",array("id"=>$order['ztid']));

             db_update("stx_terminal",array("money"=>$zd['money']+$order

 ['money']),array("id"=>$order['ztid']));//增加余额到该用户的账户上。

         }

     }

     else if($_GET['trade_status'] == 'TRADE_FINISHED') {

         //判断该笔订单是否在商户网站中已经做过处理

             //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统

 中查到该笔订单的详细,并执行商户的业务程序

             //如果有做过处理,不执行商户的业务程序

     }

     else {

       echo "trade_status=".$_GET['trade_status'];

     }

     echo "验证成功<br />";

     echo "trade_no=".$trade_no;

     notify_url.php也是一样,根据状态来编写对应的代码!notify_url.php文件中的状态要多一些。

 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

     //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

     //商户订单号

     $out_trade_no = $_POST['out_trade_no'];

     //支付宝交易号

     $trade_no = $_POST['trade_no'];

     //交易状态

     $trade_status = $_POST['trade_status'];

     if($_POST['trade_status'] == 'WAIT_BUYER_PAY') {

     //该判断表示买家已在支付宝交易管理中产生了交易记录,但没有付款

         //判断该笔订单是否在商户网站中已经做过处理

             //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

             //如果有做过处理,不执行商户的业务程序

         echo "success";    //请不要修改或删除

         //调试用,写文本函数记录程序运行情况是否正常

         //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");

     }

     else if($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {

     //该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货

         if(!$order['status']){

             db_update("stx_recharge",array("status"=>1),array("oid"=>$_POST['out_trade_no']));

             //金钱的增加

             $zd = db_line("stx_terminal",array("id"=>$order['ztid']));

             db_update("stx_terminal",array("money"=>$zd['money']+$order['money']),array("id"=>$order['ztid']));

         }

         echo "success";    //请不要修改或删除

         //调试用,写文本函数记录程序运行情况是否正常

         //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");

     }

     else if($_POST['trade_status'] =='WAIT_BUYER_CONFIRM_GOODS') {

     //该判断表示卖家已经发了货,但买家还没有做确认收货的操作

         if(!$order['status']){

             db_update("stx_recharge",array("status"=>1),array("oid"=>$_POST['out_trade_no']));

             //金钱的增加

             $zd = db_line("stx_terminal",array("id"=>$order['ztid']));

             db_update("stx_terminal",array("money"=>$zd['money']+$order['money']),array("id"=>$order['ztid']));

         }

         echo "success";    //请不要修改或删除

         //调试用,写文本函数记录程序运行情况是否正常

         //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");

     }

     else if($_POST['trade_status'] == 'TRADE_FINISHED') {

     //该判断表示买家已经确认收货,这笔交易完成

         //判断该笔订单是否在商户网站中已经做过处理

             //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

             //如果有做过处理,不执行商户的业务程序

         echo "success";    //请不要修改或删除

         //调试用,写文本函数记录程序运行情况是否正常

         //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");

     }

由于我基本上没有用到后续的发货处理,所以在该状态下未做处理,如果您的网站是购物网站秒就需要做对应的处理,比如更新状态值为已发货,或者未付款、已确认等。方便看到交易流程。同时在已付款的订单中会产生支付宝的订单id,可以同时记录在自己的订单中。

以上所述就是本文关于支付宝接口的全部内容了,希望能对大家熟练掌握支付宝接口支付的二次开发能够有所帮助。

PHP 相关文章推荐
在同一窗体中使用PHP来处理多个提交任务
May 08 PHP
用PHP程序实现支持页面后退的两种方法
Jun 30 PHP
php 3行代码的分页算法(求起始页和结束页)
Oct 21 PHP
PHP中10个不常见却非常有用的函数
Mar 21 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
PHP随机生成信用卡卡号的方法
Mar 23 PHP
PHP中预定义的6种接口介绍
May 12 PHP
关于php中的json_encode()和json_decode()函数的一些说明
Nov 20 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
php读取文件内容到数组的方法
Mar 16 #PHP
php实现以只读方式打开文件的方法
Mar 16 #PHP
php实现在服务器上创建目录的方法
Mar 16 #PHP
php实现删除空目录的方法
Mar 16 #PHP
php上传文件并存储到mysql数据库的方法
Mar 16 #PHP
php保存信息到当前Session的方法
Mar 16 #PHP
php查看当前Session的ID实例
Mar 16 #PHP
You might like
php max_execution_time执行时间问题
2011/07/17 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
js 数组克隆方法 小结
2010/03/20 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
js的2种继承方式详解
2014/03/04 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
JS实现获取当前所在周的周六、周日示例分析
2019/05/11 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
Sanic框架路由用法实例分析
2018/07/16 Python
Python Requests库基本用法示例
2018/08/20 Python
python 实现UTC时间加减的方法
2018/12/31 Python
python实现整数的二进制循环移位
2019/03/08 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
建筑工程技术应届生求职信
2013/11/17 职场文书
教师节商场活动方案
2014/02/13 职场文书
求职信标题怎么写
2014/05/26 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
小平小道观后感
2015/06/09 职场文书
老乡会致辞
2015/07/28 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
pytorch MSELoss计算平均的实现方法
2021/05/12 Python
python flask框架快速入门
2021/05/14 Python
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
浅析python中特殊文件和特殊函数
2022/02/24 Python