Notif
<?php
/**
* 支付宝通知接口
* @author YinKu.Alan
* @date 2016-03-06
*/
class NotifyAction extends CommonAction {
// 后台配的验证KEY
const PAY_PWD = '2015518';
// pay_order表type字段类型:0-购买
const PAY_ORDER_TYPE_BUY = 0;
// pay_order表type字段类型:1-充值
const PAY_ORDER_TYPE_RECHARGE = 1;
// pay_order表order_type充值订单类型: 0-支付宝
const PAY_ORDER_ALIPAY = 0;
// pay_order表order_type充值订单类型: 1-财付通
const PAY_ORDER_TENPAY = 1;
public function _initialize() {
parent::_initialize();
}
public function index() {
try {
// 交易号
$PayNo = trim(I('PayNO', null));
// 付款金额
$PayJe = trim(I('PayJe', null));
// 付款说明
$PayMore = trim(I('PayMore', null));
// 交易时间
$PayTime = trim(I('PayTime', null));
// 验证KEY
$valideKey = trim(I('get.key', null));
//if ($valideKey != self::PAY_PWD) {
// throw new Exception('验证KEY不一致');
//}
if (empty($PayNo)) {
throw new Exception('交易号为空!');
}
if (empty($PayJe)) {
throw new Exception('付款金额为空!');
}
$user = M('user')->find($PayMore);
if ( ! $user['id']) {
throw new Exception("根据付款说明{$PayMore}无法查询到用户数据!" );
}
$map = array('outer_order_no' => $PayNo);
$order = M('pay_order')->where($map)->find();
if (isset($order['id'])) {
throw new Exception("交易号{$PayNo}已经完成了充值,充值信息是:编号({$order['order_no']}), 用户ID({$order['user_id']}), 支付金额({$order['pay_money']})! ");
}
$orderData = array();
$orderData['user_id'] = $user['id'];
$orderData['user_type'] = $user['user_type'];
$orderData['order_no'] = $this->create_orderno('APay');
$orderData['outer_order_no'] = $PayNo;
$orderData['pay_money'] = $PayJe;
$orderData['type'] = self::PAY_ORDER_TYPE_RECHARGE;
$orderData['comm'] = $PayMore;
$orderData['status'] = 1;
$orderData['addtime'] = date('Y-m-d H:i:s');
$orderData['pay_title'] = 'alipay';
$orderData['order_type'] = self::PAY_ORDER_ALIPAY;
M()->startTrans();
$flag = M('pay_order')->add($orderData);
if (false === $flag) {
M()->rollback();
throw new Exception('保存数据到pay_order表失败!');
}
$userData = array();
$userData['id'] = $user['id'];
$userData['money'] = $user['money'] + $PayJe;
$flag = M('user')->save($userData);
if (false === $flag) {
M()->rollback();
throw new Exception('更新用户表失败!');
}
$logData = array();
$logData['user_id'] = $user['id'];
$logData['stage'] = 'recharge';
$logData['money'] = $PayJe;
$logData['remain_money'] = $user['money'];
$logData['comm'] = "(用户充值) 订单号 {$orderData['order_no']}";
$logData['addtime'] = date('Y-m-d H:i:s');
$logData['order_no'] = null;
$flag = M('account_log')->add($logData);
if (false === $flag) {
M()->rollback();
throw new Exception('保存数据到account_log表失败!');
}
M()->commit();
} catch (Exception $e) {
Log::write($e->getMessage());
var_dump($e->getMessage());
}
}
}
Notif的更多相关文章
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
- supervisor的安装与简单介绍
1,介绍 Supervisor是一个进程管理工具,官方的说法 用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要 ...
- iOS学习笔记——键盘处理
在网上找到的资料比较零散,这部分学起来感觉也有点空虚,内容就只包括隐藏键盘和键盘高度两部分 隐藏键盘其实就在我学习iOS开发的第一个程序里面已经实践过了,不过当时还懵懵懂懂,现在就了解了是什么一回事, ...
- Cacti -- Advance Ping
一.搭建Cacti 1. 安装epel扩展源:yum install -y epel-release 2. 安装lamp环境:yum install -y httpd php php-mysql my ...
- snmp ubuntu/centos--
软件安装 切换到系统管理员帐户 安装snmp确认snmp代理已安装rpm -q net-snmp如果未安装,安装snmpyum install net-snmp 设置开机自动运行snmp/sbin/c ...
- Model--汇总
NSFileManager.NSURL.NSFileHandle.NSData.NSXMLParser.NSUserDefaults.NSKeyedArchiver.NSKeyedUnarchiver ...
- 史上最全的常用iOS的第三方框架
文章来源:http://blog.csdn.net/sky_2016/article/details/45502921 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片 ...
- Java总结篇系列:java.lang.Object
从本篇开始,将对Java中各知识点进行一次具体总结,以便对以往的Java知识进行一次回顾,同时在总结的过程中加深对Java的理解. Java作为一个庞大的知识体系,涉及到的知识点繁多,本文将从Java ...
- 【Html5】Html5新特性Notification实现桌面消息推送(2016-05-25)
序:最近工作使用WorkTile,发现使用Chrome浏览器的时候如果有任务下发给我则会在桌面右下角提示(当前浏览器为最小化模式).感觉这个东西蛮有意思的,感觉可以给用户更好的体验,于是乎就查询了一下 ...
随机推荐
- JS中的call()和apply()方法
1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...
- 使用http.sys,让delphi 的多层服务飞起来
核心提示:一直以来,delphi 的网络通讯层都是以indy 为主,虽然indy 的功能非常多,涉及到网络服务的各个方面,但是对于大多数多层服务来说,就是需要一个快速.稳定.高效的传输层.Delphi ...
- 2.mongoDB add user in v3.0 问题的解决(Property 'addUser' of object admin is not a func)
问题:创建mongodb帐户时,出错 > db.addUser('jyu', 'aerohive') 2015-08-05T20:03:02.767+0800 E QUERY TypeE ...
- Spring的测试
spring测试要引用junit及spring-test <dependency> <groupId>junit</groupId> <artifactId& ...
- setTimeout使用闭包功能,实现定时打印数值
我们这次使用setTimeout来实现一个按照时间定时,依次打印数值的例子.其实在早期的时候,也是我经常犯的一个错误,或者实现这种能力,似乎js比较牵强,其实是我的错,哈哈!没能理解JS强大之处.我们 ...
- [PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)
冒泡排序: function bubbleSort($array){ $len=count($array); //该层循环控制 需要冒泡的轮数 for($i=1;$i<$len;$i++){ / ...
- php多文件上传
多文件上传<input type="file" name="file[]" multiple /> <?php function reArra ...
- Logistic回归 python实现
Logistic回归 算法优缺点: 1.计算代价不高,易于理解和实现2.容易欠拟合,分类精度可能不高3.适用数据类型:数值型和标称型 算法思想: 其实就我的理解来说,logistic回归实际上就是加了 ...
- 简单的后台json,前台解析 操作
后台: List<PageData> KeyWords=plantDefDetailCSAService.findKeyWords(pd); JSONArray array = new J ...
- 【bzoj1499】瑰丽华尔兹
这名字听起来实在有点耳熟..? 好吧去年暑假就应该过的题...切了 先注意到,天使施魔法的次数不限:我们可以使得某个时刻在特定方向移动一段距离(最长的长度为那个时间段)然后怎么来考虑这个DP: T,X ...