<?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层调用支付宝类库的更多相关文章

  1. Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝支付)

    最近一直在接触第三方,刚接入完支付宝的API做一下总结,个人能力薄弱有不对的地方望指教.  做的是一个小型电商项目,所以会接入第三方的支付和登入功能, 第一次接入第三方撸了很多官方文档. 进入主题, ...

  2. Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝订单退款)

    上一篇写到支付宝的支付,这代码copy下来就能直接用了,   我写学习文档时会经常贴 官方参数文档的案例地址, 因为我觉得 请求参数,响应参数说明 官方文档整理的很好,毕竟官方不会误导大家. 我学一个 ...

  3. Java 支付宝支付,退款,单笔转账到支付宝账户(单笔转账到支付宝账户)

    上次分享了支付宝订单退款的代码,今天分享一下支付宝转账的操作.  现在是有一个余额提现的功能,本来是打算做提现到银行卡的,但是客户嫌麻烦不想注册银联的开放平台账户,就说先提现到支付宝就行,二期再做银行 ...

  4. asp.net购物车,订单以及模拟支付宝支付(四)---模拟支付宝支付

    下完订单之后到支付宝付款,成功之后再返回来修改订单状态.由于只是测试,所以就没有真正的连接到支付宝,用的是一个模拟支付宝的程序 下载地址:支付宝模拟程序 这是一个vs2010的项目,本来网上找了一个模 ...

  5. APP支付宝支付接入

    1.app支付简介 买家可以在手机,掌上电脑等无线设备的应用程序内,通过支付宝(支付宝app或网页版支付宝)付款购买商品,且资金实行实时到账. 2.申请条件 1.申请前必须拥有经过实名认证的支付宝账户 ...

  6. H5 网站支付宝支付(前端部分)包含微信浏览器中的处理方法。

    手机网站唤起支付宝支付: H5 网站实现支付宝支付是一个很常见的需求: 实现方式主要是在后台配置和预支付, 前端需要做的就是唤起 支付宝App 然后就可以输入密码支付. 这个其实难度很低, 主要就是在 ...

  7. ThinkPHP5.0 实现 app支付宝支付功能

    前几天做项目,要求要用到支付宝接口,第一次做,弄了好几天 各种坑啊,简单写一下我做支付宝支付的过程,希望对也是第一次做支付宝支付的童鞋有帮助, 不懂的可以先去支付平台看一下支付宝支付的文档,我是下的d ...

  8. yii2 支付宝支付教程 [ 2.0 版本 ]

    yii2 支付宝支付教程 [ 2.0 版本 ] 支付宝支付流程个人理解大致就这三步1.前台页面将支付信息数据通过立即支付按钮 ajax提交到订单处理层2.在订单处理层引用支付宝的接口 将支付数据写入 ...

  9. iOS - AliPay 支付宝支付

    1.支付宝支付申请 支付宝支付官方签约集成指引 支付宝APP支付官方集成指引 蚂蚁金服开放平台 1.1 支付宝 APP 支付申请步骤 APP 支付:APP 支付是商户通过在移动端应用 APP 中集成开 ...

随机推荐

  1. C语言中static关键字的用法

    C记得还是大一时学的,现在觉得好久没用了,又捧起来看看.今天刚看到有关static关键字,仔细地看了一遍<C和指针>这本书中的解释,现在觉得清楚多了. 首先,我们将static关键字,修饰 ...

  2. 最短的IE判断var ie=!-[1,]分析

    以前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的. 复制代码代码如下:  var ie = !+"\v1";  仅仅需要7bytes!参见这篇文章,<32 byte ...

  3. async await promise

    async 异步函数,以后可能会用得很广. 1.箭头函数: 没有{ }时不写return 也有返回值 2.Promise : 异步神器,很多异步api都是基于Promise 3.new Promise ...

  4. Fiddler工具的界面说明

    1.Fiddler界面说明 2.session的模块说明 包含部分如下: 注:标蓝色区域的内容为平时较常用的部分 3.session不同图标和不同颜色的含义 默认颜色的含义如下: 部分图标的含义如下: ...

  5. 自动化测试-Selenium家谱介绍

    一.自动化测试定义 自动化测试是通工具录制或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代替人工对系统的功能进行验证. 二.什么样的项目适合做自动化测试 1.需求明确,不会 ...

  6. TurnipBit口袋编程计算机:和孩子一起DIY许愿的流星

    听说对着流星许愿,许的愿望都会实现,虽然不知道这个说法是不是真的,但是流星还是很好看的,为了能一直看到流星,今天就自己做一个流星保存下来,想什么时候看,就什么时候看. 首先需要想象一下流星是什么样子的 ...

  7. 正确显示textarea中输入的回车和空格

    在textarea中输入的文本.如果含有回车或空格.在界面上显示的时候则不那么正常.回车消失了,空格变短了. 如何解决这个问题呢.有2种方法. 1.使用<pre>标签 w3c对pre元素是 ...

  8. MySQL事务-ROLLBACK,COMMIT用法详解

    使用ROLLBACK 既然我们已经知道了什么是事务处理,下面讨论事务处理的管理中所涉及的问题. 管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退. MySQ ...

  9. timeline自适应时间轴

    近期项目一直有类似QQ空间那样的时间轴,来展示公司新闻动态,或者流程之类的设计UI. 每每出现,不以为然,这次总结了下,精简下 ================= ================== ...

  10. windows编程学习笔记(三)ListBox的使用方法

    ListBox是Windows中的一种控件,一般被当做子窗口使用,Windows中所有子窗口都是通过发送一个通知码到父窗口父窗口通过WM_COMMAND消息接收,并在此消息中处理,并控制子窗口,Lis ...