TP5 中实现支付宝支付 利用model层调用支付宝类库
<?php
/**
* Created by PhpStorm.
* User: admin
* Date: 2017/8/16
* Time: 09:16
*/
namespace app\admin\model;
use think\Model; class Config extends Model
{
public function alipay_config(){
$alipay_config = array(
'partner' => '', //收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号
'seller_id' =>'', // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
'key' => '', // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=>123这类自定义参数,必须外网可以正常访问
'notify_url' => "", // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=>123这类自定义参数,必须外网可以正常访问
'return_url' => "", //签名方式
'sign_type' => strtoupper('MD5'), //字符编码格式 目前支持 gbk 或 utf-8
'input_charset'=> strtolower('utf-8'), //ca证书路径地址,用于curl中ssl校验
//请保证cacert.pem文件在当前文件夹目录中
'cacert' => getcwd().'\\cacert.pem', //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
'transport' => 'http',
// 支付类型 ,无需修改
'payment_type'=> "1", // 产品类型,无需修改
'service'=> "create_direct_pay_by_user", //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//↓↓↓↓↓↓↓↓↓↓ 请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ // 防钓鱼时间戳 若要使用请调用类文件submit中的query_timestamp函数
'anti_phishing_key' => "",
// 客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1
'exter_invoke_ip' => "",
);
return $alipay_config;
}
public function parameter(){
$config = new Config();
$alipay_config = $config->alipay_config();
$parameter = array(
"service" => $alipay_config['service'],
"partner" => $alipay_config['partner'],
"seller_id" => $alipay_config['seller_id'],
"payment_type" => $alipay_config['payment_type'],
"notify_url" => $alipay_config['notify_url'],
"return_url" => $alipay_config['return_url'], "anti_phishing_key"=>$alipay_config['anti_phishing_key'],
"exter_invoke_ip"=>$alipay_config['exter_invoke_ip'],
"out_trade_no" => '',
"subject" => '',
"total_fee" => '',
"body" => '',
"_input_charset" => trim(strtolower($alipay_config['input_charset']))
//其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.kiX33I&treeId=62&articleId=103740&docType=1
//如"参数名"=>"参数值" );
return $parameter;
} }
-------------------------------------------------
Controller控制器层
<?php
namespace app\admin\controller;
use think\Controller; //使用控制器
use app\admin\model\Submit;
use app\admin\model\Corefunction;
use app\admin\model\Md5function;
use app\admin\model\Notify;
use app\admin\model\Config;
use think\Db;//引入控制器
use think\Session;//引入控制器 class pay extends Controller
{
public function pay(){
vendor('Alipay.Corefunction');
vendor('Alipay.Md5function');
vendor('Alipay.Notify');
vendor('Alipay.Submit');
$out_trade_no = $_POST['WIDout_trade_no'];//订单名称,必填
$subject = $_POST['WIDsubject'];///商品描述,可空
$total_fee = $_POST['WIDtotal_fee'];//付款金额,必填
$body = $_POST['WIDout_trade_no'];
$config = new Config();
$alipay_config = $config->alipay_config();
$parameter = $config->parameter();
$parameter['out_trade_no'] = $out_trade_no;
$parameter['subject'] = $subject ;
$parameter['total_fee'] = $total_fee ;
$parameter['body'] = $body;
session::set("money",$total_fee);//将金额存入session
$alipaySubmit = new Submit($alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认"); return $html_text;
}
public function notify_url(){
$config = new Config();
$alipay_config = $config->alipay_config();
$alipayNotify = new Notify($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') {
//判断该笔订单是否在商户网站中已经做过处理
}
else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
//判断该笔订单是否在商户网站中已经做过处
}
echo "success"; //请不要修改或删除
}
else {
//验证失败
echo "fail";
/* 调试用,写文本函数记录程序运行情况是否正常
logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");*/
}
return $this->fetch('autoinvest');
}
public function return_url(){
$config = new Config();
$alipay_config = $config->alipay_config();
$alipayNotify = new Notify($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') {
//判断该笔订单是否在商户网站中已经做过处理
}
else {
echo "trade_status=".$_GET['trade_status'];
} }
else {
//验证失败
//如要调试,请看alipay_notify.php页面的verifyReturn函数 } }
}
model层的文件均是 支付宝 的类库 修改而成 里面没有大的变动 只是加上TP5的model固定模式写法 版权声明:本文为原创文章,转载请注明出处。
TP5 中实现支付宝支付 利用model层调用支付宝类库的更多相关文章
- Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝支付)
最近一直在接触第三方,刚接入完支付宝的API做一下总结,个人能力薄弱有不对的地方望指教. 做的是一个小型电商项目,所以会接入第三方的支付和登入功能, 第一次接入第三方撸了很多官方文档. 进入主题, ...
- Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝订单退款)
上一篇写到支付宝的支付,这代码copy下来就能直接用了, 我写学习文档时会经常贴 官方参数文档的案例地址, 因为我觉得 请求参数,响应参数说明 官方文档整理的很好,毕竟官方不会误导大家. 我学一个 ...
- Java 支付宝支付,退款,单笔转账到支付宝账户(单笔转账到支付宝账户)
上次分享了支付宝订单退款的代码,今天分享一下支付宝转账的操作. 现在是有一个余额提现的功能,本来是打算做提现到银行卡的,但是客户嫌麻烦不想注册银联的开放平台账户,就说先提现到支付宝就行,二期再做银行 ...
- asp.net购物车,订单以及模拟支付宝支付(四)---模拟支付宝支付
下完订单之后到支付宝付款,成功之后再返回来修改订单状态.由于只是测试,所以就没有真正的连接到支付宝,用的是一个模拟支付宝的程序 下载地址:支付宝模拟程序 这是一个vs2010的项目,本来网上找了一个模 ...
- APP支付宝支付接入
1.app支付简介 买家可以在手机,掌上电脑等无线设备的应用程序内,通过支付宝(支付宝app或网页版支付宝)付款购买商品,且资金实行实时到账. 2.申请条件 1.申请前必须拥有经过实名认证的支付宝账户 ...
- H5 网站支付宝支付(前端部分)包含微信浏览器中的处理方法。
手机网站唤起支付宝支付: H5 网站实现支付宝支付是一个很常见的需求: 实现方式主要是在后台配置和预支付, 前端需要做的就是唤起 支付宝App 然后就可以输入密码支付. 这个其实难度很低, 主要就是在 ...
- ThinkPHP5.0 实现 app支付宝支付功能
前几天做项目,要求要用到支付宝接口,第一次做,弄了好几天 各种坑啊,简单写一下我做支付宝支付的过程,希望对也是第一次做支付宝支付的童鞋有帮助, 不懂的可以先去支付平台看一下支付宝支付的文档,我是下的d ...
- yii2 支付宝支付教程 [ 2.0 版本 ]
yii2 支付宝支付教程 [ 2.0 版本 ] 支付宝支付流程个人理解大致就这三步1.前台页面将支付信息数据通过立即支付按钮 ajax提交到订单处理层2.在订单处理层引用支付宝的接口 将支付数据写入 ...
- iOS - AliPay 支付宝支付
1.支付宝支付申请 支付宝支付官方签约集成指引 支付宝APP支付官方集成指引 蚂蚁金服开放平台 1.1 支付宝 APP 支付申请步骤 APP 支付:APP 支付是商户通过在移动端应用 APP 中集成开 ...
随机推荐
- ubuntu 安装 pythonenv
This will get you going with the latest version of pyenv and make it easy to fork and contribute any ...
- Vue 组件(component)之 精美的日历
公司的要求,需要开发一个精美的日历组件(IOS , 安卓, PC 的IE9+都能运行),写完后想把它分享出来,希望大家批评(). 先来个截图 代码已经分享到 https://github.com/zh ...
- Scrapy1.4爬取笑话网站数据,Python3.5+Django2.0构建笑话应用
Part1:需求简要描述 1.抓取http://www.jokeji.cn网站的笑话 2.以瀑布流方式显示 Part2:安装爬虫框架Scrapy1.4 1. 安装Scrapy1.4 E:\django ...
- 机器学习笔记3-Tensorflow简介
前言 前面两篇主要写了一些机器学习的基础概念,从本篇开始我们来了解下深度学习.深度学习是机器学习的一个子集,是一种特殊的数学模型.同样是从输入到输出,深度学习在这两者之间会有很多层称为"隐层 ...
- Mtklog 分析(学习)
常见log异常类型: JE NE KE EE(external(modem) exception) 一.常见应用异常搜索关键信息 1. 常见应用crash的(系统提示***已停止运行) ,可以在ma ...
- JQueryPagination分页插件,ajax从struts请求数据
2017-07-16 学完了struts,做了个关于分页的小例子,用到了JQuery分页插件Pagination,先贴下插件下载地址 http://www.jq22.com/jquery-info13 ...
- 【后缀自动机】洛谷P3804模板题
题目描述 给定一个只包含小写字母的字符串SSS, 请你求出 SSS 的所有出现次数不为 111 的子串的出现次数乘上该子串长度的最大值. 输入输出格式 输入格式: 一行一个仅包含小写字母的字符串SSS ...
- chrome调试工具高级不完整使用指南(实战二)
3.3 给页面添加测试脚本 在现实的工作中,我们往往会遇到一些问题在线上就会触发然后本地就触发不了的问题.或者是,要给某个元素写一个测试脚本.这个时候如果是浏览器有提供一个添加脚本的功能的话,那么我们 ...
- 学习总结:工程管理与makefile
工程管理与makefile 一.为什么需要makefile和make 一个工程中的源文件可能很多,按照类型.功能.模块分别放在若干个目录中,为了有效地管理软件工程,更高效地编译整个工程,需要用到mak ...
- 纯CSS3模拟星体旋转效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...