php支付宝接口 的使用
下载地址(java/php都有)
https://doc.open.alipay.com/doc2/detail?treeId=66&articleId=103571&docType=1
-──────
代码文件结构
───────
create_direct_pay_by_user-php-UTF-8
│
├lib┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈类文件夹
│ │
│ ├alipay_core.function.php ┈┈┈┈┈┈支付宝接口公用函数文件
│ │
│ ├alipay_notify.class.php┈┈┈┈┈┈┈支付宝通知处理类文件
│ │
│ ├alipay_submit.class.php┈┈┈┈┈┈┈支付宝各接口请求提交类文件
│ │
│ └alipay_md5.function.php┈┈┈┈┈┈┈支付宝接口MD5函数文件
│
├log.txt┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈日志文件
│
├alipay.config.php┈┈┈┈┈┈┈┈┈┈┈┈基础配置类文件
│
├alipayapi.php┈┈┈┈┈┈┈┈┈┈┈┈┈┈支付宝接口入口文件
│
├notify_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈服务器异步通知页面文件
│
├return_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈页面跳转同步通知文件
│
├cacert.pem ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈用于CURL中校验SSL的CA证书文件
│
└readme.txt ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈使用说明文本
※注意※
1、必须开启curl服务
(1)使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"即可
(2)文件夹中cacert.pem文件请务必放置到商户网站平台中(如:服务器上),并且保证其路径有效,提供的代码demo中的默认路径是当前文件夹下——getcwd().'\\cacert.pem'
2、需要配置的文件是:
alipay.config.php
alipayapi.php
----------------
1 发起支付
public function app_alipay_params($data) ]
{ require_once(APP . 'Vendor' . DS . 'Alipay' . DS .'alipay.config.php');//┈基础配置类文件
require_once(APP . 'Vendor' . DS . 'Alipay' . DS .'lib' . DS . 'alipay_submit.class.php');//支付宝各接口请求提交类文件 $alipay_config['notify_url'] = 'https://'.$_SERVER['HTTP_HOST'].'/alipay/notify';//notify回调 //商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no = $data['order_no']; //商品名称,必填
$subject = '商品名称'; //付款金额,必填
$total_fee = round($data['goods_price'],2); //收银台页面上,商品展示的超链接,非必填
//$show_url = '/member/orderitem/'.$data['order_id']; //商品描述,可空
$body = '商品描述'; //构造要请求的参数数组,无需改动
$parameter = array(
"service" => $alipay_config['app_service'],
"partner" => $alipay_config['partner'],
"seller_id" => $alipay_config['seller_id'],
"payment_type" => $alipay_config['payment_type'],//支付类型
"notify_url" => $alipay_config['notify_url'],//服务器异步通知页面路径
"_input_charset" => trim(strtolower($alipay_config['input_charset'])),
"out_trade_no" => $out_trade_no,//商户网站唯一订单号
"subject" => $subject,
"total_fee" => $total_fee,//交易金额
//"show_url" => $show_url,
"body" => $body,
//其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.2Z6TSk&treeId=60&articleId=203693&docType=1
//如"参数名" => "参数值" 注:上一个参数末尾需要“,”逗号。 ); //建立请求
$alipaySubmit = new AlipaySubmit($alipay_config);
$alipay_params = $alipaySubmit->buildRequestPara($parameter);
$alipay_params['sign'] = urlencode($alipay_params['sign']);
$alipay_params = createLinkstring($alipay_params);
/*echo '<pre>';
print_r($alipay_params);
echo '</pre>';
exit;*/
echo json_encode(['status' => 200, 'error' => 2000, 'message' => '获取成功', 'data' => ['alipay_params' => $alipay_params]]);exit;
}
2 处理支付后的动作,比如更改订单状态为支付,跳转到支付成功页面等等
/alipay/notify
处理异步通知(同步把post改成get)
// 异步通知处理
public function notify() {
require_once("./phpcms/plugin/alipay/alipay.config.php");
require_once("./phpcms/plugin/alipay/lib/alipay_notify.class.php");
//计算得出通知验证结果
$alipayNotify = new 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') {//第三个状态为TRADE_FINISHED,表示订单完结不可再退款。
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序 //注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 //调试用,写文本函数记录程序运行情况是否正常
//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
}
else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {//第二个状态为TRADE_SUCCESS,在这个状态下商户可做相应业务逻辑操作
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序 //注意:
//付款完成后,支付宝系统发送该交易状态通知 //调试用,写文本函数记录程序运行情况是否正常
//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
} //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
$this->_afterPay($out_trade_no);
}
else {
//验证失败
echo "fail";
//调试用,写文本函数记录程序运行情况是否正常
//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
}
}
官方文档
参考文档
http://www.cnblogs.com/jiqing9006/p/5846207.html
http://www.cnblogs.com/huii/p/4727347.html
php支付宝接口 的使用的更多相关文章
- wap支付宝接口的问题
今天在支付宝接口开发时,遇到的两个坑 第一个: https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8nHr4i& ...
- ThinkPHP实现支付宝接口功能
最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能.这里我用的是即时到帐的接口,具体实现的步骤如下:一.下载支付宝接口包下载地址:https://doc.open.alipay. ...
- (实用篇)php支付宝接口用法分析
本文实例讲述了php支付宝接口用法.分享给大家供大家参考.具体分析如下: 现在流行的网站支持平台,支付宝当仁不让的老大了,现在我们就来告诉你如何使用支付宝api来做第三方支付,把支付宝放到自己网站来, ...
- 【转载】关于Alipay支付宝接口(Java版)
转载自:http://blog.163.com/lai_chao/blog/static/70340789201412724619514/ 1.alipay 双功能支付简介 2.alipay 提交支付 ...
- PHP支付宝接口RSA验证
这两天一直困扰的PHP RSA签名验证问题终于解决了,由于之前RSA接触的不多,再加上官方至今还未有PHP的SDK可供参考,因此走了一些弯路,写在这里和大家分享. 虽然支付宝官方还未提供相关SD ...
- android应用程序如何调用支付宝接口
最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...
- [转]支付宝接口程序、文档及解读(ASP.NET)
本文转自:http://www.cnblogs.com/blodfox777/archive/2009/11/03/1595223.html 最近需要为网站加入支付宝的充值接口,而目前关于支付宝接口开 ...
- android应用程序如何调用支付宝接口(转)
最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...
- android开发支付宝接口开发流程(密钥篇)
参考博客:http://blog.it985.com/12276.html 官方下载地址:http://download.alipay.com/public/api/base/WS_MOBILE_PA ...
- Android应用集成支付宝接口的简化
拿到支付宝接口的andriod demo后有点无语,集成一个支付服务而已,要在十几个java类之间引用来引用去,这样不仅容易导致应用本身代码结构的复杂化,调试起来也很累,于是操刀改造之: 该删的删,该 ...
随机推荐
- Vue.js基础(二)
属性 可以将数据进行计算得出新的结果,也可以说是一个公式,有缓存. 应用:1,频繁使用的复杂公式. 2,需要监控的-----全局状态的管理 简写: computed:{ result:functi ...
- <转载> FreeNAS的安装和简单配置 http://freenas.cn/?p=342
前些日子在公司搭了一个模拟生产环境的平台.由于是测试环境,资源有限只能使用虚拟机实现,所以存储这块就想到了使用FreeNAS.很早以前玩儿过几次,当时是生产环境需要上存储设备,经过对比还是选择的更可靠 ...
- hive命令的执行方式
1.通过cli直接执行 2.hive -e "hql" 如:[root@host ~]# hive -e "use gamedw;show tables" [r ...
- tensorflow实战系列(三)一个完整的例子
#!/usr/bin/env python2# -*- coding: utf-8 -*-"""Created on Wed Jan 18 08:42:55 2017 @ ...
- jquery下插入标签以及clone的应用
//内部插入 插入一个儿子 //var $ele = $("<h1></h1>")//创建h1标签 // $ele.html('hello') // $el ...
- OS位数,基本概念,结合iOS
CPU位数,一般指CPU支持的指令集位数,32位CPU对应32位的指令集,64位的CPU对应64位的指令集,不过为了向下兼容,64位CPU也支持32位的指令集. 操作系统位数,一般指操作系统对应的指令 ...
- mysql 索引优化知识整理笔记
http://blog.csdn.net/zhxp_870516/article/details/8434539 http://www.jb51.net/article/49346.htm https ...
- Delphi处理TWebBrowser的Close事件
当TWebBrowser控件访问的 Web 页上的脚本调用window.close方法时,TWebBrowser控件可能会在窗体中消失.我们的程序应该对此作出反应,否则再次访问TWebBrowser控 ...
- while read line
# grep "请求报文:" application-20170822-*.log >> applog # cat applog|cut -d ":" ...
- Centos上安装配置docker(命令集)
导出镜像存储: docker save house/redis:3.2 > redis_img.tar (也可以使用镜像ID) 导入镜像存储: docker load < redis_ ...