| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597 |
- <?php
- namespace app\weixin\model;
- use app\weixin\model\Member as MemberModel;
- use app\weixin\service\Award;
- use app\weixin\service\PRedis;
- use think\Db;
- class Payment
- {
- /**
- * 返回给微信
- */
- public static function rebackOk(){
- echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
- exit;
- }
- /**
- * 处理订单
- * @param $outTradeNo 订单号
- * @param array $notifyData 回调数据
- * @return bool
- */
- public static function catchOrder($outTradeNo, $notifyData=[]){
- Db::startTrans();
- // 更新订单支付状态信息
- $payMoney = isset($notifyData['total_fee'])? moneyFormat($notifyData['total_fee']): 0;
- $orderPayMoney = moneyFormat($payMoney/100);
- $orderInfo = Books::getInfo(['order_sn'=> $outTradeNo]);
- PRedis::set('orders:books:info_'.$outTradeNo, ['order'=> $orderInfo,'notify'=> $notifyData], 600);
- $userId = isset($orderInfo['uid'])? intval($orderInfo['uid']) : 0;
- if(empty($userId)){
- return false;
- }
- $bookAt = time();
- $updateData = [
- 'pay_type'=> isset($notifyData['pay_type'])? intval($notifyData['pay_type']) : 1,
- 'transaction_id'=> isset($notifyData['transaction_id'])? $notifyData['transaction_id'] : '',
- 'status'=> 2,
- 'book_at'=> date('Y-m-d H:i:s', $bookAt),
- ];
- PRedis::set('orders:books:update_'.$outTradeNo, ['order'=> $updateData,'notify'=> $notifyData], 600);
- $res = Books::saveData(['order_sn'=> $outTradeNo], $updateData);
- if(!$res){
- PRedis::set('orders:books:error_'.$outTradeNo, ['order'=> $updateData,'notify'=> $notifyData,'error'=> '更新订单支付数据失败'], 600);
- Db::rollback();
- return false;
- }
- // 账户明细
- $memberInfo = Member::getInfo(['id'=> $userId],'id,openid,redheart,user_nickname,real_name');
- $redheart = isset($memberInfo['redheart'])? intval($memberInfo['redheart']) : 0;
- $accountData = [
- 'type' => 2,
- 'account_type' => 4,
- 'change_type' => 2,
- 'user_id' => $userId,
- 'money' => moneyFormat($orderPayMoney, 2),
- 'balance' => $redheart,
- 'created_at' => date('Y-m-d H:i:s'),
- 'remark' => "微信支付活动报名:单号[{$outTradeNo}],活动:{$orderInfo['aid']},金额" . $orderPayMoney,
- ];
- PRedis::set('payments:books:account_' . $outTradeNo, ['notify' => $notifyData, 'log' => $accountData,'user'=> $memberInfo], 600);
- AccountLog::insertGetId($accountData);
- Db::commit();
- // 发送报名提交成功消息
- $openid = isset($memberInfo['openid']) ? $memberInfo['openid'] : '';
- $nickname = isset($memberInfo['user_nickname']) ? $memberInfo['user_nickname'] : '';
- $bookNo = isset($orderInfo['book_num'])? trim($orderInfo['book_num']) : '无';
- $money = isset($orderInfo['money'])? floatval($orderInfo['money']) : 0;
- $credit = isset($orderInfo['credit'])? floatval($orderInfo['credit']) : 0;
- $bookStatus = Books::where(['order_sn'=> $outTradeNo])->value('status');
- if($bookStatus != 2){
- return false;
- }
- if($openid) {
- $aid = isset($orderInfo['aid'])? intval($orderInfo['aid']) : 0;
- $activityInfo = Activity::where(['id'=> $aid])
- ->field('id,starttime,title,address')
- ->find();
- $title = isset($activityInfo['title'])? trim($activityInfo['title']) : '无';
- $address = isset($activityInfo['address'])? trim($activityInfo['address']) : '无';
- $bookAt = $bookAt? date('Y.m.d H:i', $bookAt) : date('Y.m.d H:i');
- $params = [
- 'title' => "我们已经收到您的报名,稍后会进行审核,请留意后续的通知哦!\n\n姓名:\t{$nickname}(昵称)\n\n支付单号:\t{$outTradeNo}\n\n支付金额:\t{$orderPayMoney}",
- 'remark' => "转发积姻缘,把活动分享给身边的朋友,一起来脱单哦!",
- 'type' => 'book',
- 'keywords' => [
- 'keyword1' => [
- 'value' => $title,
- 'color' => '#173177',
- ],
- 'keyword2' => [
- 'value' => $bookAt,
- 'color' => '#173177',
- ],
- 'keyword3' => [
- 'value' => '待审核',
- 'color' => '#173177',
- ],
- 'keyword4' => [
- 'value' => "活动费用{$money}元,活动守时金{$credit}元。",
- 'color' => '#173177',
- ],
- ],
- 'url' => url('/weixin/activity/bookdetail?id='.$aid, '', '', true),
- ];
- PRedis::set('payments:books:message_' . $outTradeNo, ['notify' => $notifyData, 'params' => $params], 600);
- Wechat::sendTplMsg($openid, $params);
- }
- return true;
- }
- /**
- * 充值结果处理
- * @param $outTradeNo
- * @param array $notifyData
- * @return bool
- * @throws \think\Exception
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- * @throws \think\exception\PDOException
- */
- public static function catchRechargeOrder($outTradeNo, $notifyData=[]){
- try {
- db()->startTrans();
- // 更新订单支付状态信息
- $payMoney = isset($notifyData['total_fee']) ? moneyFormat($notifyData['total_fee']) : 0;
- $orderPayMoney = moneyFormat($payMoney / 100);
- $orderInfo = db('user_recharge_log')
- ->where(['order_sn' => $outTradeNo])
- ->field('money,pay_money,user_id,order_sn')
- ->find();
- $orderSn = isset($orderInfo['order_sn']) ? $orderInfo['order_sn'] : '';
- $userId = isset($orderInfo['user_id']) ? $orderInfo['user_id'] : 0;
- $num = isset($orderInfo['money']) ? $orderInfo['money'] : 0;
- $updateData = [
- 'pay_money' => $orderPayMoney,
- 'transaction_id' => isset($notifyData['transaction_id']) ? $notifyData['transaction_id'] : '',
- 'status' => 2,
- 'pay_at' => date('Y-m-d H:i:s'),
- ];
- PRedis::set('payments:redheart:catchOrder_' . $outTradeNo, ['notify' => $notifyData, 'update' => $updateData], 600);
- $res = db('user_recharge_log')->where(['order_sn' => $outTradeNo])->update($updateData);
- if (!$res) {
- PRedis::set('payments:redheart:updateError_' . $outTradeNo, ['notify' => $notifyData, 'update' => $updateData], 600);
- db()->rollback();
- return false;
- }
- // 更新账户
- if ($userId && $num > 0) {
- $memberInfo = Member::where(['id' => $userId])->field('openid,redheart')->find();
- $redheart = isset($memberInfo['redheart']) ? intval($memberInfo['redheart']) : 0;
- $data = ['updated_at' => date('Y-m-d H:i:s'), 'redheart' => intval($redheart + $num)];
- if (!Member::where(['id' => $userId])->update($data)) {
- db()->rollback();
- return false;
- }
- $accountData = [
- 'type' => 1,
- 'account_type' => 1,
- 'change_type' => 1,
- 'user_id' => $userId,
- 'money' => intval($num),
- 'balance' => $redheart,
- 'created_at' => date('Y-m-d H:i:s'),
- 'remark' => "微信支付爱心充值:单号[{$outTradeNo}],数量{$num},金额" . $orderPayMoney,
- ];
- PRedis::set('payments:redheart:account_' . $outTradeNo, ['notify' => $notifyData, 'log' => $accountData,'user'=> $memberInfo], 600);
- db('account_log')->insertGetId($accountData);
- // 发送充值成功消息
- $openid = isset($memberInfo['openid']) ? $memberInfo['openid'] : '';
- if($openid) {
- $params = [
- 'title' => "恭喜您充值成功",
- 'remark' => "感谢您的使用,点击详情查看充值明细",
- 'type' => 'redheart',
- 'keywords' => [
- 'keyword1' => [
- 'value' => moneyFormat($orderPayMoney, 2),
- 'color' => '#173177',
- ],
- 'keyword2' => [
- 'value' => date('Y.m.d H:i'),
- 'color' => '#173177',
- ],
- 'keyword3' => [
- 'value' => '微信支付',
- 'color' => '#173177',
- ],
- ],
- 'url' => url('/weixin/account/index', '', '', true),
- ];
- PRedis::set('payments:redheart:message_' . $outTradeNo, ['notify' => $notifyData, 'params' => $params], 600);
- Wechat::sendTplMsg($openid, $params);
- }
- }
- // 操作日志
- UserLog::saveLog(['user_id' => $userId, 'type' => 2, 'content' => "充值爱心:{$num}个"]);
- db()->commit();
- // 分销收益结算
- $inviteInfo = MemberModel::getInviteInfo($userId);
- $inviteId = isset($inviteInfo['invite_id'])? $inviteInfo['invite_id'] : 0;
- if($inviteInfo && $inviteId>0){
- PRedis::set('markets:recharge:entry' . $outTradeNo, ['notify' => $notifyData, 'inviteInfo'=> $inviteInfo, 'params' => $params], 7200);
- Award::marketAward($inviteId, $userId, 8, $orderPayMoney);
- }
- return true;
- } catch (\Exception $exception){
- PRedis::set('payments:redheart:error:'.$outTradeNo, $exception, 600);
- db()->rollback();
- return false;
- }
- }
- /**
- * 微信支付
- * @param $orderId 订单ID
- * @param $orderInfo 订单信息
- * @param array $userInfo 用户信息
- * @return array
- */
- public static function wechatPay($orderId, $orderInfo, $userInfo=[]){
- $prepayId = isset($orderInfo['prepay_id']) ? trim($orderInfo['prepay_id']) : '';
- $orderStatus = isset($orderInfo['status']) ? trim($orderInfo['status']) : 0;
- $userId = isset($userInfo['id']) ? intval($userInfo['id']) : 0;
- if($orderStatus != 1){
- return 5007;
- }
- $orderSn = isset($orderInfo['order_sn'])? $orderInfo['order_sn'] : '';
- if(empty($orderSn)){
- return 1012;
- }
- $orderSn = isset($orderInfo['order_sn'])? $orderInfo['order_sn'] : '';
- if(empty($orderSn)){
- showJson(1004, 1012);
- }
- // 支付金额
- $orderMoney = isset($orderInfo['money']) ? moneyFormat($orderInfo['money']) : 0.00;
- $credit = isset($orderInfo['credit']) ? moneyFormat($orderInfo['credit']) : 0.00;
- $orderAmount = moneyFormat($orderMoney + $credit);
- if ($orderMoney <= 0) {
- return 5008;
- }
- if ($prepayId && $orderStatus == 1) {
- // 查询订单状态
- $queryResult = Wechat::queryOrder($orderSn);
- PRedis::set('payments:books:queryOrder_'.$orderSn, $queryResult, 600);
- if ($queryResult && Payment::catchOrder($orderInfo['order_sn'], $queryResult)) {
- return 5009;
- } else {
- $orderSn = makeTradeNo('BK', $userId);
- $saveData = ['order_sn' => $orderSn, 'remark' => '订单重新发起支付,原单号:' . $orderInfo['order_sn']];
- PRedis::set('payments:books:makeSn_'.$orderInfo['order_sn'], $saveData);
- Books::saveData(['id' => $orderId], $saveData);
- }
- }
- // 获取OPENID
- $openid = session('openid');
- if (empty($openid)) {
- $openid = Member::where(['id' => $userId])->value('openid');
- }
- $order = [
- 'orderNo' => $orderSn,
- 'amount' => $orderAmount,
- 'openid' => $openid,
- 'body' => '报名订单支付',
- ];
- $params = Wechat::jsapiUnifiedorder($order);
- PRedis::set('payments:books:payParams_'.$orderSn,['order'=> $order, 'params'=> $params,'date'=> date('Y-m-d H:i:s')], 600);
- $code = isset($params['code']) ? $params['code'] : '';
- if ($code == 'error') {
- return $params['message'];
- }
- // 更新订单参数
- $prepayId = isset($params['prepay_id'])? $params['prepay_id'] : '';
- Books::saveData(['id' => $orderId], ['prepay_id' => $prepayId]);
- unset($params['prepay_id']);
- return $params;
- }
- /**
- * VIP套餐支付处理
- * @param $outTradeNo
- * @param $notifyData
- * @param $taskNo
- * @return bool|string
- * @throws \think\Exception
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- * @throws \think\exception\PDOException
- */
- public static function catchVip($outTradeNo, $notifyData, $taskNo){
- // 验证订单是否存在
- $where = ['order_sn' => $outTradeNo, 'type'=> 4];
- $orderInfo = db('user_recharge_log')
- ->field('money,pay_money,user_id,order_sn,status')
- ->where($where)
- ->find();
- if(empty($orderInfo)){
- PRedis::set('payments:vip:errorMoney_'.$taskNo, ['result'=> $notifyData, 'error'=> $outTradeNo.'订单不存在'], 600);
- return false;
- }
- // 订单已处理
- PRedis::set('payments:vip:order_'.$taskNo, ['result'=> $notifyData, 'order'=> $orderInfo], 600);
- $orderStatus = isset($orderInfo['status']) ? intval($orderInfo['status']) : 0;
- // 验证订单状态是否可处理
- if ($orderStatus != 1) {
- db('user_recharge_log')->where($where)->update(['remark'=> '订单已处理']);
- Payment::rebackOk();
- return true;
- }
- // 验证订单金额是否正确
- $payDebug = config('weixin.payDebug');
- $payMoney = isset($notifyData['total_fee']) ? moneyFormat($notifyData['total_fee']) : 0;
- $orderMoney = isset($orderInfo['pay_money']) ? moneyFormat($orderInfo['pay_money']) : 0.00;
- if (!$payDebug && $orderMoney * 100 != $payMoney) {
- $error = ['remark'=> "订单金额错误:\n支付金额:" . $payMoney . "\n订单金额:" . $orderMoney];
- PRedis::set('payments:vip:errorMoney_'.$taskNo, ['result'=> $notifyData, 'order'=> $orderInfo,'error'=> $error], 600);
- db('user_recharge_log')->where($where)->update($error);
- return '支付金额错误';
- }
- try {
- db()->startTrans();
- // 更新订单支付状态信息
- $payMoney = isset($notifyData['total_fee']) ? moneyFormat($notifyData['total_fee']) : 0;
- $orderPayMoney = moneyFormat($payMoney / 100);
- $userId = isset($orderInfo['user_id']) ? $orderInfo['user_id'] : 0;
- $num = isset($orderInfo['money']) ? $orderInfo['money'] : 0;
- $updateData = [
- 'pay_money' => $orderPayMoney,
- 'transaction_id' => isset($notifyData['transaction_id']) ? $notifyData['transaction_id'] : '',
- 'status' => 2,
- 'pay_at' => date('Y-m-d H:i:s'),
- ];
- PRedis::set('payments:vip:catchOrder_' . $outTradeNo, ['notify' => $notifyData, 'update' => $updateData], 600);
- $res = db('user_recharge_log')->where($where)->update($updateData);
- if (!$res) {
- PRedis::set('payments:vip:updateError_' . $outTradeNo, ['notify' => $notifyData, 'update' => $updateData], 600);
- db()->rollback();
- return false;
- }
- // 更新账户
- if ($userId && $num > 0) {
- $dateTime = strtotime(date('Y-m-d 00:00:00'));
- $memberInfo = Member::where(['id' => $userId])->field('openid,vip_auth,vip_expire')->find();
- $vipAuth = isset($memberInfo['vip_auth']) ? intval($memberInfo['vip_auth']) : 0;
- $vipExpire = isset($memberInfo['vip_expire']) ? intval($memberInfo['vip_expire']) : 0;
- $newVipExpire = $vipExpire>$dateTime && $vipAuth? $vipExpire + $num*30*24*3600+86400 : $dateTime+$num*30*24*3600+86400;
- $data = ['updated_at' => date('Y-m-d H:i:s'), 'vip_auth'=> 1, 'vip_expire' => $newVipExpire];
- if (!Member::where(['id' => $userId])->update($data)) {
- db()->rollback();
- return false;
- }
- $num = intval($num);
- $accountData = [
- 'type' => 6,
- 'account_type' => 4,
- 'change_type' => 1,
- 'user_id' => $userId,
- 'money' => $num,
- 'balance' => 0,
- 'created_at' => date('Y-m-d H:i:s'),
- 'remark' => "购买VIP:单号[{$outTradeNo}],时长{$num}个月,支付金额" . $orderPayMoney,
- ];
- PRedis::set('payments:vip:account_' . $outTradeNo, ['notify' => $notifyData, 'log' => $accountData,'user'=> $memberInfo], 600);
- db('account_log')->insertGetId($accountData);
- // 发送充值成功消息
- $openid = isset($memberInfo['openid']) ? $memberInfo['openid'] : '';
- if($openid) {
- $monthTxt = $num ==6? '半年' : ($num == 12? '一年' : $num.'个月');
- $params = [
- 'title' => "恭喜您购买{$monthTxt}VIP成功\n\n到期时间:\t".date('Y.m.d',$newVipExpire).'到期',
- 'remark' => "感谢您的使用,点击详情查看购买明细",
- 'type' => 'pay',
- 'keywords' => [
- 'keyword1' => [
- 'value' => moneyFormat($orderPayMoney, 2),
- 'color' => '#173177',
- ],
- 'keyword2' => [
- 'value' => date('Y.m.d H:i'),
- 'color' => '#173177',
- ],
- ],
- 'url' => url('/weixin/account/index', '', '', true),
- ];
- PRedis::set('payments:vip:message_' . $outTradeNo, ['notify' => $notifyData, 'params' => $params], 600);
- Wechat::sendTplMsg($openid, $params);
- }
- }
- // 操作日志
- UserLog::saveLog(['user_id' => $userId, 'type' => 3, 'content' => "购买VIP:{$num}个月"]);
- db()->commit();
- // 分销收益结算
- $inviteInfo = MemberModel::getInviteInfo($userId);
- $inviteId = isset($inviteInfo['invite_id'])? $inviteInfo['invite_id'] : 0;
- if($inviteInfo && $inviteId>0){
- PRedis::set('markets:vip:entry' . $outTradeNo, ['notify' => $notifyData, 'inviteInfo'=> $inviteInfo, 'params' => $params], 7200);
- Award::marketAward($inviteId, $userId, 2, $orderPayMoney);
- }
- Payment::rebackOk();
- return true;
- } catch (\Exception $exception){
- PRedis::set('payments:vip:error:'.$outTradeNo, $exception, 600);
- db()->rollback();
- return $exception->getMessage();
- }
- }
- /**
- * 人工牵线支付处理
- * @param $outTradeNo
- * @param $notifyData
- * @param $taskNo
- * @return bool|string
- * @throws \think\Exception
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- * @throws \think\exception\PDOException
- */
- public static function catchHand($outTradeNo, $notifyData, $taskNo){
- // 验证订单是否存在
- $where = ['order_sn' => $outTradeNo, 'type'=> 5];
- $orderInfo = db('user_recharge_log')
- ->field('money,pay_money,user_id,order_sn,status')
- ->where($where)
- ->find();
- if(empty($orderInfo)){
- PRedis::set('payments:hand:errorMoney_'.$taskNo, ['result'=> $notifyData, 'error'=> $outTradeNo.'订单不存在'], 600);
- return false;
- }
- // 订单已处理
- PRedis::set('payments:hand:order_'.$taskNo, ['result'=> $notifyData, 'order'=> $orderInfo], 600);
- $orderStatus = isset($orderInfo['status']) ? intval($orderInfo['status']) : 0;
- // 验证订单状态是否可处理
- if ($orderStatus != 1) {
- db('user_recharge_log')->where($where)->update(['remark'=> '订单已处理']);
- Payment::rebackOk();
- return true;
- }
- // 验证订单金额是否正确
- $payDebug = config('weixin.payDebug');
- $payMoney = isset($notifyData['total_fee']) ? moneyFormat($notifyData['total_fee']) : 0;
- $orderMoney = isset($orderInfo['pay_money']) ? moneyFormat($orderInfo['pay_money']) : 0.00;
- if (!$payDebug && $orderMoney * 100 != $payMoney) {
- $error = ['remark'=> "订单金额错误:\n支付金额:" . $payMoney . "\n订单金额:" . $orderMoney];
- PRedis::set('payments:hand:errorMoney_'.$taskNo, ['result'=> $notifyData, 'order'=> $orderInfo,'error'=> $error], 600);
- db('user_recharge_log')->where($where)->update($error);
- return '支付金额错误';
- }
- try {
- db()->startTrans();
- // 更新订单支付状态信息
- $payMoney = isset($notifyData['total_fee']) ? moneyFormat($notifyData['total_fee']) : 0;
- $orderPayMoney = moneyFormat($payMoney / 100);
- $userId = isset($orderInfo['user_id']) ? $orderInfo['user_id'] : 0;
- $num = isset($orderInfo['money']) ? $orderInfo['money'] : 0;
- $updateData = [
- 'pay_money' => $orderPayMoney,
- 'transaction_id' => isset($notifyData['transaction_id']) ? $notifyData['transaction_id'] : '',
- 'status' => 2,
- 'pay_at' => date('Y-m-d H:i:s'),
- ];
- PRedis::set('payments:hand:catchOrder_' . $outTradeNo, ['notify' => $notifyData, 'update' => $updateData], 600);
- $res = db('user_recharge_log')->where($where)->update($updateData);
- if (!$res) {
- PRedis::set('payments:hand:updateError_' . $outTradeNo, ['notify' => $notifyData, 'update' => $updateData], 600);
- db()->rollback();
- return false;
- }
- // 更新账户
- if ($userId && $num > 0) {
- $dateTime = date('Y-m-d');
- $memberInfo = Member::where(['id' => $userId])->field('openid,vip_auth,vip_expire')->find();
- $vipAuth = isset($memberInfo['vip_auth']) ? intval($memberInfo['vip_auth']) : 0;
- $vipExpire = isset($memberInfo['vip_expire']) ? intval($memberInfo['vip_expire']) : 0;
- $newVipExpire = $vipExpire>$dateTime && $vipAuth? ($vipExpire-$dateTime) + $num*30*24*3600+86400 : $dateTime+$num*30*24*3600+86400;
- $data = ['updated_at' => date('Y-m-d H:i:s'), 'vip_auth'=> 1, 'vip_expire' => $newVipExpire];
- if (!Member::where(['id' => $userId])->update($data)) {
- db()->rollback();
- return false;
- }
-
- $accountData = [
- 'type' => 7,
- 'account_type' => 4,
- 'change_type' => 1,
- 'user_id' => $userId,
- 'money' => $num,
- 'balance' => 0,
- 'created_at' => date('Y-m-d H:i:s'),
- 'remark' => "购买人工牵线服务:单号[{$outTradeNo}],支付金额" . $orderPayMoney,
- ];
- PRedis::set('payments:hand:account_' . $outTradeNo, ['notify' => $notifyData, 'log' => $accountData,'user'=> $memberInfo], 600);
- db('account_log')->insertGetId($accountData);
- // 发送充值成功消息
- $openid = isset($memberInfo['openid']) ? $memberInfo['openid'] : '';
- if($openid) {
- $monthTxt = $num ==6? '半年' : ($num == 12? '一年' : $num.'个月');
- $params = [
- 'title' => "恭喜您购买{$monthTxt}人工牵线服务成功",
- 'remark' => "感谢您的使用,点击详情查看购买明细",
- 'type' => 'pay',
- 'keywords' => [
- 'keyword1' => [
- 'value' => moneyFormat($orderPayMoney, 2),
- 'color' => '#173177',
- ],
- 'keyword2' => [
- 'value' => date('Y.m.d H:i'),
- 'color' => '#173177',
- ],
- ],
- 'url' => url('/weixin/account/index', '', '', true),
- ];
- PRedis::set('payments:hand:message_' . $outTradeNo, ['notify' => $notifyData, 'params' => $params], 600);
- Wechat::sendTplMsg($openid, $params);
- }
- }
- // 操作日志
- UserLog::saveLog(['user_id' => $userId, 'type' => 3, 'content' => "购买人工牵线服务:支付{$orderPayMoney}元"]);
- db()->commit();
- // 分销收益结算
- $inviteInfo = MemberModel::getInviteInfo($userId);
- $inviteId = isset($inviteInfo['invite_id'])? $inviteInfo['invite_id'] : 0;
- if($inviteInfo && $inviteId>0){
- PRedis::set('markets:hand:entry' . $outTradeNo, ['notify' => $notifyData, 'inviteInfo'=> $inviteInfo, 'params' => $params], 7200);
- Award::marketAward($inviteId, $userId, 3, $orderPayMoney);
- }
- Payment::rebackOk();
- return true;
- } catch (\Exception $exception){
- PRedis::set('payments:hand:error:'.$outTradeNo, $exception, 600);
- db()->rollback();
- return $exception->getMessage();
- }
- }
- }
|