1564 lines
66 KiB
PHP
1564 lines
66 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers;
|
||
|
||
use App\Facades\WechatService;
|
||
use App\Jobs\AddUnionUser;
|
||
use App\Jobs\DoTask;
|
||
use App\Jobs\SendEasySms;
|
||
use App\Jobs\SendWorkProgramMessage;
|
||
use App\Models\BlessingUsers;
|
||
use App\Models\MerchantAccount;
|
||
use App\Models\Server\MerchantMembers;
|
||
use App\Models\Server\MerchantShareChannel;
|
||
use App\Models\Server\MerchantUser;
|
||
use App\Models\User;
|
||
use App\Jobs\InviteMerchant;
|
||
use App\Models\Live\Asset;
|
||
use App\Models\Live\Task;
|
||
use App\Models\Live\ViewerShare;
|
||
//use EasyWeChat\OpenWork\Application as WorkApplication;
|
||
use EasyWeChat\Factory;
|
||
use EasyWeChat\Kernel\Messages\TextCard;
|
||
use GuzzleHttp\Client;
|
||
use Illuminate\Http\Request;
|
||
use App\Repositories\Eloquent\SmsRepository as Sms;
|
||
use Illuminate\Support\Facades\Log;
|
||
use Illuminate\Support\Facades\Redis;
|
||
use App\Models\Wechat;
|
||
use Illuminate\Support\Facades\Cache;
|
||
use App\Utils\Http;
|
||
use App\Models\Participant;
|
||
// use EasyWeChat\Kernel\Messages\Image;
|
||
use App\Utils\IP;
|
||
use App\Jobs\UpdateWechatUserInfo;
|
||
use App\Models\Live\Viewer;
|
||
use SimpleSoftwareIO\QrCode\Facades\QrCode;
|
||
use App\Jobs\MakeShareCash;
|
||
use App\Jobs\MakeOldShareCash;
|
||
use App\Jobs\SendTemplateMsg;
|
||
use App\Models\AccessRecord;
|
||
use App\Models\Live\Messenger;
|
||
use App\Models\Live\AssetLog;
|
||
use App\Models\MEarningTransfers;
|
||
use App\Models\MerchantUsers;
|
||
use App\Models\ServerQuestion;
|
||
use Intervention\Image\ImageManagerStatic as Image;
|
||
|
||
class WechatController extends Controller
|
||
{
|
||
protected $sms;
|
||
|
||
public function __construct(Sms $sms)
|
||
{
|
||
$this->sms = $sms;
|
||
}
|
||
|
||
//
|
||
/**
|
||
* 处理微信的请求消息
|
||
*
|
||
* @return string
|
||
*/
|
||
public function serve(Request $request)
|
||
{
|
||
// Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志
|
||
$app = app('wechat.mini_program');
|
||
$app->server->push(function ($message) {
|
||
// $message = array (
|
||
// 'ToUserName' => 'gh_66ddebb44654',
|
||
// 'FromUserName' => 'oVEaG5KqLUpuz0CukddVMSq5as_o',
|
||
// 'CreateTime' => '1611050964',
|
||
// 'MsgType' => 'miniprogrampage',
|
||
// 'MsgId' => '23064700922189383',
|
||
// 'Title' => '获取服务号二维码',
|
||
// 'AppId' => 'wxc41491431733671e',
|
||
// 'PagePath' => 'pages/tabBar/home',
|
||
// 'ThumbUrl' => 'http://mmbiz.qpic.cn/mmbiz_jpg/o4p1tZHtvpAFBQhOjo96xRia72TpcJ7biaZCEiadbSlqjSfLAa65dTUbPYgdaORNfiaoDpbeHbicGseFp9UedT46AsQ/0',
|
||
// 'ThumbMediaId' => 'zTMcYIe19PQewxzLyNTnBOjgYmei-CMvTQi_4gtW43JmrKzfckh9wuZNt09-kznC',
|
||
// );
|
||
$this->recvMessage($message);
|
||
return "您好!欢迎使用福恋小程序";
|
||
});
|
||
// Log::info('response arrived.');
|
||
return $app->server->serve();
|
||
}
|
||
|
||
public function merchantWorkServer()
|
||
{
|
||
$config = config('wechat.work_merchant');
|
||
$app = Factory::openWork($config);
|
||
$server = $app->server;
|
||
|
||
$server->push(function ($message) {
|
||
switch ($message['InfoType']) {
|
||
//推送suite_ticket
|
||
case 'suite_ticket':
|
||
break;
|
||
//授权成功通知
|
||
case 'create_auth':
|
||
break;
|
||
//变更授权通知
|
||
case 'cancel_auth':
|
||
break;
|
||
//通讯录事件通知
|
||
case 'change_contact':
|
||
switch ($message['ChangeType']) {
|
||
case 'create_user':
|
||
return '新增成员事件';
|
||
break;
|
||
case 'update_user':
|
||
return '更新成员事件';
|
||
break;
|
||
case 'delete_user':
|
||
return '删除成员事件';
|
||
break;
|
||
case 'create_party':
|
||
return '新增部门事件';
|
||
break;
|
||
case 'update_party':
|
||
return '更新部门事件';
|
||
break;
|
||
case 'delete_party':
|
||
return '删除部门事件';
|
||
break;
|
||
case 'update_tag':
|
||
return '标签成员变更事件';
|
||
break;
|
||
}
|
||
break;
|
||
default:
|
||
return 'fail';
|
||
break;
|
||
}
|
||
});
|
||
$response = $server->serve();
|
||
$response->send();
|
||
}
|
||
|
||
public function merchantWorkLoveMPServer()
|
||
{
|
||
$config = config('wechat.work_merchant_love_mp');
|
||
$app = Factory::openWork($config);
|
||
$server = $app->server;
|
||
$server->push(function ($message) {
|
||
Log::info("企业微信");
|
||
Log::info($message);
|
||
switch ($message['InfoType']) {
|
||
//推送suite_ticket
|
||
case 'suite_ticket':
|
||
break;
|
||
//授权成功通知
|
||
case 'create_auth':
|
||
break;
|
||
//变更授权通知
|
||
case 'cancel_auth':
|
||
break;
|
||
//通讯录事件通知
|
||
case 'change_contact':
|
||
switch ($message['ChangeType']) {
|
||
case 'create_user':
|
||
return '新增成员事件';
|
||
break;
|
||
case 'update_user':
|
||
return '更新成员事件';
|
||
break;
|
||
case 'delete_user':
|
||
return '删除成员事件';
|
||
break;
|
||
case 'create_party':
|
||
return '新增部门事件';
|
||
break;
|
||
case 'update_party':
|
||
return '更新部门事件';
|
||
break;
|
||
case 'delete_party':
|
||
return '删除部门事件';
|
||
break;
|
||
case 'update_tag':
|
||
return '标签成员变更事件';
|
||
break;
|
||
}
|
||
break;
|
||
default:
|
||
return 'fail';
|
||
break;
|
||
}
|
||
});
|
||
$response = $server->serve();
|
||
$response->send();
|
||
}
|
||
|
||
public function merchantWorkLoveSaasServer()
|
||
{
|
||
$config = config('wechat.work_merchant_love_saas');
|
||
$app = Factory::openWork($config);
|
||
$server = $app->server;
|
||
$server->push(function ($message) {
|
||
Log::info("企业微信-福恋saas");
|
||
Log::info($message);
|
||
switch ($message['InfoType']) {
|
||
//推送suite_ticket
|
||
case 'suite_ticket':
|
||
break;
|
||
//授权成功通知
|
||
case 'create_auth':
|
||
break;
|
||
//变更授权通知
|
||
case 'cancel_auth':
|
||
break;
|
||
//通讯录事件通知
|
||
case 'change_contact':
|
||
switch ($message['ChangeType']) {
|
||
case 'create_user':
|
||
return '新增成员事件';
|
||
break;
|
||
case 'update_user':
|
||
return '更新成员事件';
|
||
break;
|
||
case 'delete_user':
|
||
return '删除成员事件';
|
||
break;
|
||
case 'create_party':
|
||
return '新增部门事件';
|
||
break;
|
||
case 'update_party':
|
||
return '更新部门事件';
|
||
break;
|
||
case 'delete_party':
|
||
return '删除部门事件';
|
||
break;
|
||
case 'update_tag':
|
||
return '标签成员变更事件';
|
||
break;
|
||
}
|
||
break;
|
||
default:
|
||
return 'fail';
|
||
break;
|
||
}
|
||
});
|
||
$response = $server->serve();
|
||
$response->send();
|
||
}
|
||
|
||
|
||
private function recvOfficialMessage($message)
|
||
{
|
||
switch ($message['MsgType']) {
|
||
case 'event':
|
||
return '收到事件消息';
|
||
break;
|
||
case 'text':
|
||
return '收到文字消息';
|
||
break;
|
||
case 'image':
|
||
return '收到图片消息';
|
||
break;
|
||
case 'voice':
|
||
return '收到语音消息';
|
||
break;
|
||
case 'video':
|
||
return '收到视频消息';
|
||
break;
|
||
case 'location':
|
||
return '收到坐标消息';
|
||
break;
|
||
case 'link':
|
||
return '收到链接消息';
|
||
break;
|
||
case 'file':
|
||
return '收到文件消息';
|
||
// ... 其它消息
|
||
default:
|
||
return '收到其它消息';
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
private function recvMessage($message)
|
||
{
|
||
$fromUsername = $message['FromUserName'];
|
||
$content = '你好!欢迎来到福恋小程序。';
|
||
//接收消息
|
||
$msgType = $message['MsgType'];
|
||
if ($msgType == 'event') {//时间消息
|
||
if ($message['Event'] && $message['Event'] == 'user_enter_tempsession') {//进入会话2019年9月5日15:17:事件
|
||
$content = $this->getServerQuestion('MP');
|
||
$data = ['content' => $content];
|
||
$this->sendMessage($fromUsername, 'text', $data);
|
||
}
|
||
} elseif ($msgType == 'text' || $msgType == 'miniprogrampage') {//文本消息
|
||
//根据文本返回对应内容
|
||
$result = $this->getResponse($message);
|
||
if ($result && $result['type'] == 'TEXT') {
|
||
$data = ['content' => $result['content']];
|
||
} elseif ($result && $result['type'] == 'IMAGE') {
|
||
$data = ['media_id' => $result['content']];
|
||
}
|
||
$this->sendMessage($fromUsername, $result['type'], $data);
|
||
} elseif ($msgType == 'image') {//图片消息
|
||
|
||
}
|
||
return;
|
||
}
|
||
|
||
public function getResponse($message)
|
||
{
|
||
try {
|
||
if ($message['MsgType'] == 'text') {
|
||
$inpput_content = $message['Content'];
|
||
} else {
|
||
$inpput_content = $message['Title'];
|
||
}
|
||
$question = ServerQuestion::where("name", 'like', '%' . $inpput_content . '%')->orWhereHas('keywords', function ($sql) use ($inpput_content) {
|
||
$sql->where("name", 'like', '%' . $inpput_content . '%');
|
||
})->first();
|
||
if (empty($question)) {
|
||
$content = $this->getServerQuestion('MP');
|
||
return ['type' => 'TEXT', 'content' => $content];
|
||
}
|
||
$answer = $question->answer;
|
||
$content = "";
|
||
if ($answer && $answer->type == 'TEXT') {
|
||
$content = $this->getResponseText($answer);
|
||
} elseif ($answer && $answer->type == 'IMAGE') {
|
||
$content = $this->getResponseImage($answer);
|
||
}
|
||
if ($content)
|
||
return ['type' => $answer->type, 'content' => $content];
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public function getResponseImage($answer)
|
||
{
|
||
try {
|
||
Image::configure(['driver' => 'gd']);
|
||
$pic = $answer->content;
|
||
$image = Image::make($pic);
|
||
$path = storage_path('qrcode/' . time() . 'server.png');
|
||
$image->save($path);
|
||
$content = $answer->content;
|
||
$app = \EasyWeChat::miniProgram();
|
||
// $path = app()->basePath('public/server_qrcode.jpg');
|
||
$result = $app->media->uploadImage($path);
|
||
$content = $result['media_id'];
|
||
if (file_exists($path)) {
|
||
unlink($path);
|
||
}
|
||
return $content;
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public function getResponseText($answer)
|
||
{
|
||
try {
|
||
switch ($answer->path_type) {
|
||
case 'MP':
|
||
$content = '<a href="http://www.qq.com" data-miniprogram-appid="' . config('wechat.mini_program.app_id') . '" data-miniprogram-path="' . $answer->path . '">' . $answer->content . '</a>';
|
||
break;
|
||
case 'OFFICIAL':
|
||
$content = '<a href="' . $answer->path . '">' . $answer->content . '</a>';
|
||
break;
|
||
default:
|
||
$content = $answer->content;
|
||
break;
|
||
}
|
||
return $content;
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public function getServerQuestion($type)
|
||
{
|
||
try {
|
||
$content = "你好,小恋暂时不在,请用手点击下方问题,可以获得答案,请用手点击问题!请用手点击问题!";
|
||
//换行
|
||
$n = "\r\n";
|
||
$questions = ServerQuestion::where('type', $type)->pluck('name')->toArray();
|
||
$i = 1;
|
||
foreach ($questions as $question) {
|
||
// $question = $i.' '."<a href=''>".$question."</a>";
|
||
$question = $i . ' <a href="weixin://bizmsgmenu?msgmenucontent=' . $question . '&msgmenuid=' . $i . '">' . $question . '</a>';
|
||
$content = $content . $n . $question;
|
||
$i++;
|
||
}
|
||
return $content;
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
private function sendMessage($touser, $msgtype, $data)
|
||
{
|
||
|
||
// $app = \EasyWeChat::miniProgram();
|
||
// $token = $app->access_token->getToken();
|
||
// $access_token = $token['access_token'];
|
||
// $access_token = $this->get_accessToken();
|
||
$access_token = "";
|
||
$resp = Http::get("https://love.ufutx.com/go/api/mp/access_token?token=go_love");
|
||
if ($resp) {
|
||
if ($resp) {
|
||
$res = json_decode($resp, true);
|
||
$access_token = $res["data"]['access_token'];
|
||
}
|
||
}
|
||
if (empty($access_token)) {
|
||
return $this->failure("缺少access_token");
|
||
}
|
||
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token;
|
||
$data['touser'] = $touser;
|
||
$data['msgtype'] = $msgtype;
|
||
if (strtoupper($msgtype) == 'TEXT') {
|
||
$data['text'] = $data;
|
||
} elseif (strtoupper($msgtype) == 'IMAGE') {
|
||
$data['image'] = $data;
|
||
}
|
||
$result = Http::post($url, json_encode($data, JSON_UNESCAPED_UNICODE));
|
||
}
|
||
|
||
private function uploadMedia($img)
|
||
{
|
||
// $app = \EasyWeChat::miniProgram();
|
||
$path = app()->basePath($img);
|
||
// $image = exif_imagetype($path);
|
||
// $type = image_type_to_mime_type($image); // 获取文件类型
|
||
// $type = 'image/png';
|
||
// $token = $app->access_token->getToken();
|
||
// $access_token = $token['access_token'];
|
||
$access_token = "";
|
||
$resp = Http::get("https://love.ufutx.com/go/api/mp/access_token?token=go_love");
|
||
if ($resp) {
|
||
if ($resp) {
|
||
$res = json_decode($resp, true);
|
||
$access_token = $res["data"]['access_token'];
|
||
}
|
||
}
|
||
if (empty($access_token)) {
|
||
return $this->failure("缺少access_token");
|
||
}
|
||
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=" . $access_token . "&type=image";
|
||
// 启用 curl
|
||
$curl = curl_init();
|
||
|
||
if (class_exists('\CURLFile')) {
|
||
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
|
||
$data = array('media' => new \CURLFile(realpath($path)));//>=5.5
|
||
} else {
|
||
if (defined('CURLOPT_SAFE_UPLOAD')) {
|
||
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
|
||
}
|
||
$data = array('media' => '@' . realpath($path));//<=5.5
|
||
}
|
||
|
||
// 请求 URl
|
||
curl_setopt($curl, CURLOPT_URL, $url);
|
||
// 是否 post 提交 0否 1是
|
||
curl_setopt($curl, CURLOPT_POST, 1);
|
||
// 提交的数据
|
||
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
|
||
// 返回的内容作为变量储存,而不是直接输出。这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true。
|
||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||
// 设置请求头
|
||
curl_setopt($curl, CURLOPT_USERAGENT, "TEST");
|
||
// 检查是否有错误
|
||
$error = curl_error($curl);
|
||
if ($error) {
|
||
// json 格式 转成数组
|
||
return json_decode($error, true);
|
||
} else {
|
||
// json 格式 转成数组
|
||
$result = curl_exec($curl); // 取出接口返回数据
|
||
return json_decode($result, true);
|
||
}
|
||
}
|
||
|
||
private function checkSignature($request)
|
||
{
|
||
$signature = $request->input('signature');
|
||
$timestamp = $request->input('timestamp');
|
||
$nonce = $request->input("nonce");
|
||
$token = "love";
|
||
$tmpArr = array($token, $timestamp, $nonce);
|
||
sort($tmpArr, SORT_STRING);
|
||
$tmpStr = implode($tmpArr);
|
||
$tmpStr = sha1($tmpStr);
|
||
|
||
if ($tmpStr == $signature) {
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public function otherWechatAuth(Request $request, $account)
|
||
{
|
||
// dd(request()->ip());
|
||
$account = strtolower($account);
|
||
$paas_wechat_user = session('wechat.oauth_user')[$account];
|
||
$paas_official_openid = $paas_wechat_user['id'];
|
||
Cache::put('paas_name', strtoupper($account), 10);
|
||
session(['paas_official_openid' => $paas_official_openid]);
|
||
$user_id = $request->input('user_id', 7776);
|
||
if (config('app.env') == 'local') {
|
||
return redirect('http://localhost:8080/#/information/' . $user_id . '?paas=' . strtoupper($account));
|
||
}
|
||
return redirect(env('APP_URL') . '/mobile/#/information/' . $user_id . '?paas=' . strtoupper($account));
|
||
}
|
||
|
||
public function wechatAuth(Request $request)
|
||
{
|
||
$wechat_user = session('wechat.oauth_user')['default'];
|
||
$openid = $wechat_user['id'];
|
||
//缓存openid
|
||
session(['official_openid' => $openid]);
|
||
$mobile = $request->input('mobile');
|
||
if ($mobile) {
|
||
$user = User::where('mobile', $mobile)->first();
|
||
if ($user && $user->wechat && empty($user->wechat->official_openid)) {
|
||
$user->wechat->official_openid = $openid;
|
||
$user->wechat->save();
|
||
}
|
||
}
|
||
if (config('app.env') == 'local') {
|
||
// dd($request->input('type'));
|
||
$redirect_url = 'http://localhost:8081/#/login';
|
||
return redirect($redirect_url);
|
||
}
|
||
if (config('app.env') == 'alpha') {
|
||
$host = 'http://alpha.ufutx.net';
|
||
} else {
|
||
$host = env('APP_URL') . '';
|
||
}
|
||
$redirect_url = $host . '/';
|
||
$type = $request->input('type');
|
||
$from_user_id = $request->input('from_user_id');
|
||
if ($type == 'arena') {
|
||
$arena_id = $request->input('id');
|
||
$redirect_url = $host . '/api/official/arenas/' . $arena_id . '?from_user_id=' . $from_user_id;
|
||
} elseif ($type == 'login') {
|
||
$wechat = Wechat::where('official_openid', $openid)->first();
|
||
if ($wechat && $wechat->user) {
|
||
$user = $wechat->user;
|
||
$token = $user->createToken($user->mobile)->accessToken;
|
||
}
|
||
$redirect_url = $host . '/mobile/#/login';
|
||
}
|
||
// return redirect($redirect_url);
|
||
return redirect($redirect_url);
|
||
}
|
||
/**
|
||
* 新年红包授权页面
|
||
*/
|
||
public function activityWechatAuth(Request $request)
|
||
{
|
||
$from_official_openid = $request->input('from_official_openid');
|
||
//微信授权用户信息 静默登录只能获取openid
|
||
$wechat_user = session('wechat.oauth_user')['new'];
|
||
$source = $request->has('source') ? $request->source : '';
|
||
$official_openid = $wechat_user['id'];
|
||
if ($source) {
|
||
Redis::setnx($official_openid . 'new_source', $source);
|
||
} else {
|
||
$source = Redis::get($official_openid . 'new_source');
|
||
}
|
||
//缓存openid
|
||
session(['official_openid' => $official_openid]);
|
||
session(['from_official_openid' => $from_official_openid]);
|
||
//活动页面url
|
||
$param = '?official_openid=' . $official_openid . '&from_official_openid=' . $from_official_openid;
|
||
if (config('app.env') == 'local') {
|
||
$redirect_url = 'http://localhost:8080/#/nineFruit' . $param . '&source=' . $source;
|
||
} else {
|
||
$redirect_url = env('APP_URL') . '/rp/#/nineFruit' . $param . '&source=' . $source;
|
||
}
|
||
//todo
|
||
//记录参与用户信息
|
||
$key = Participant::PART_KEY;
|
||
$key = $key . $official_openid;
|
||
|
||
// if (Cache::has($key)) {
|
||
// $participant = Cache::get($key);
|
||
// }else{
|
||
$participant = Participant::where('official_openid', $official_openid)->first();
|
||
if (empty($participant)) {
|
||
$participant = Participant::create([
|
||
'official_openid' => $official_openid,
|
||
'ip' => Ip::getip(),
|
||
]);
|
||
// }
|
||
Cache::forever($key, $participant);
|
||
}
|
||
//获取用户的最新信息
|
||
UpdateWechatUserInfo::dispatch($participant)->onQueue('love');
|
||
//重定向到活动页面
|
||
return redirect($redirect_url);
|
||
}
|
||
|
||
// 家的味道授权-静默授权
|
||
|
||
public function FamilyAuth(Request $request)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
$openId = $wechatUser->getId();
|
||
Log::info($request->url);
|
||
$url = config('app.env') == 'production' ? env('APP_URL') . '/pu/#/' : 'http://alpha.ufutx.net/pu/#/';
|
||
$url = $request->url ? urldecode($request->url) : $url;
|
||
if ($url == "https://love.ufutx.com/pu/" || $url == "https://love.ufutx.cn/pu/") {
|
||
$url = config("app.url") . "/pu/#/";
|
||
}
|
||
Log::info($url);
|
||
$anchor_openid = $request->anchor_openid ?? '';
|
||
$from_openid = $request->from_openid ?? '';
|
||
$serve_tab = $request->serve_tab ?? '';
|
||
// 商户账户id
|
||
$merchant_id = $request->merchant_id ?? '';
|
||
//商户用户id
|
||
$account_id = $request->account_id ?? '';
|
||
// 是否自动支付
|
||
$auto_pay = $request->auto_pay ?? 0;
|
||
// 联盟id
|
||
$allinace_id = $request->alliance_id ?? '';
|
||
$evaluate_type = $request->evaluate_type ?? '';
|
||
// 渠道码id
|
||
$share_channel_id = $request->share_channel_id ?? '';
|
||
$auth_state = $request->auth_state ?? 0;
|
||
$qr_code_id = $request->qr_code_id;
|
||
$m_id = $request->m_id;
|
||
$video_id = 0;
|
||
$spread_merchant_id = $request->spread_merchant_id ?? '';
|
||
$vip_level_id = $request->vip_level_id ?? '';
|
||
if ((strpos($url, 'videos='))) {
|
||
$video_id = substr($url, strpos($url, 'videos=') + 7);
|
||
}
|
||
$q_type = $request->q_type;
|
||
$q_type_id = $request->q_type_id;
|
||
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
|
||
$url = $url . 'openid=' . $openId . "&from_openid=" . $from_openid . "&from_user_id=" . $request->from_user_id .
|
||
"&from_platform=" . $request->from_platform . '&anchor_openid=' . $anchor_openid . '&merchant_id=' . $merchant_id .
|
||
'&account_id=' . $account_id . '&auto_pay=' . $auto_pay . '&share_channel_id=' . $share_channel_id .
|
||
'&alliance_id=' . $allinace_id . '&serve_tab=' . $serve_tab . '&auth_state=' . $auth_state . '&qr_code_id=' . $qr_code_id .
|
||
'&evaluate_type=' . $evaluate_type . '&video_id=' . $video_id . '&actioveLabel=' . $request->actioveLabel . '&m_id=' . $m_id
|
||
. '&spread_merchant_id=' . $spread_merchant_id . '&vip_level_id=' . $vip_level_id . '&q_type=' . $q_type . '&q_type_id=' . $q_type_id;
|
||
// Log::info("跳转链接");
|
||
// Log::info($url);
|
||
$user = MerchantUsers::where('openid', $openId)->first();
|
||
if (!$user) {
|
||
$rand_str = $this->randString(8);
|
||
$user = new MerchantUsers();
|
||
$user->openid = $openId;
|
||
$user->rand_str = $rand_str;
|
||
$user->nickname = '用户' . $rand_str;
|
||
$user->save();
|
||
}
|
||
if ($request->merchant_id && $request->merchant_id >= 1) {
|
||
$record = AccessRecord::where('open_id', $openId)->where('account_id', $request->merchant_id)->first();
|
||
if ($record) {
|
||
$record->last_time = now();
|
||
$record->save();
|
||
} else {
|
||
$record = new AccessRecord();
|
||
$record->open_id = $openId;
|
||
$record->account_id = $request->merchant_id;
|
||
$record->last_time = now();
|
||
$record->recommender = $from_openid;
|
||
$record->save();
|
||
}
|
||
InviteMerchant::dispatch($request->merchant_id)->onQueue('love');
|
||
}
|
||
if (!empty($record)) {
|
||
Redis::zincrby('access_count' . $record->id, 1, $request->merchant_id);
|
||
}
|
||
if (empty($user->uuid)) {
|
||
//增加基表账号
|
||
AddUnionUser::dispatch($user, $password = null, 'SO')->onQueue('love');
|
||
}
|
||
return redirect($url);
|
||
}
|
||
|
||
public function inviteMerchantProcessOrderAuth(Request $request)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
$openId = $wechatUser->getId();
|
||
$url = config('app.env') == 'production' ? env('APP_URL') . '/pu_m/#/' : 'http://sadmin.ufutx.net/pu_m/#/';
|
||
$url = $request->url ? urldecode($request->url) : $url;
|
||
// 商户账户id
|
||
$merchant_id = $request->merchant_id ?? '';
|
||
$order_id = $request->order_id;
|
||
$role_id = $request->role_id;
|
||
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
|
||
$url = $url . 'openid=' . $openId . '&merchant_id=' . $merchant_id . '&order_id=' . $order_id . '&role_id=' . $role_id;
|
||
return redirect($url);
|
||
}
|
||
|
||
public function groupOrderAuth(Request $request)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
$openId = $wechatUser->getId();
|
||
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
|
||
$url = $request->url ? urldecode($request->url) : $url;
|
||
// 商户账户id
|
||
$merchant_id = $request->merchant_id ?? '';
|
||
$order_id = $request->order_id;
|
||
$id = $request->id;
|
||
$from_openid = $request->from_openid;
|
||
$history_id = $request->history_id;
|
||
$type = $request->type;
|
||
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
|
||
$url = $url . 'openid=' . $openId . '&merchant_id=' . $merchant_id . '&id=' . $id . '&order_id=' . $order_id .
|
||
'&history_id=' . $history_id . '&type=' . $type . '&from_openid=' . $from_openid;
|
||
return redirect($url);
|
||
}
|
||
|
||
public function activityMeetingAuth(Request $request)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
$openId = $wechatUser->getId();
|
||
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
|
||
$url = $request->url ? urldecode($request->url) : $url;
|
||
// 商户账户id
|
||
$merchant_id = $request->merchant_id ?? '';
|
||
$id = $request->id;
|
||
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
|
||
$url = $url . 'openid=' . $openId . '&merchant_id=' . $merchant_id . '&id=' . $id;
|
||
return redirect($url);
|
||
}
|
||
|
||
// 非静默授权
|
||
public function NonSilenceAuth(Request $request)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
$openId = $wechatUser->getId();
|
||
$moreInfo = $wechatUser->getOriginal();
|
||
$user = MerchantUsers::where('openid', $openId)->first();
|
||
if (!$user) {
|
||
$user = new MerchantUsers();
|
||
$user->openid = $openId;
|
||
$rand_str = $this->randString(8);
|
||
$user->nickname = !empty($moreInfo['nickname']) ? $moreInfo['nickname'] : '用户' . $rand_str;
|
||
$user->pic = !empty($moreInfo['headimgurl']) ? $moreInfo['headimgurl'] : 'https://images.ufutx.com/202007/01/e0de60525143427d4dd19515a5b387ba.png';
|
||
$user->sex = !empty($moreInfo['sex']) ? $moreInfo['sex'] : 0;
|
||
$user->city = !empty($moreInfo['city']) ? $moreInfo['city'] : '';
|
||
$user->province = !empty($moreInfo['province']) ? $moreInfo['province'] : '';
|
||
$user->unionid = !empty($moreInfo['unionid']) ? $moreInfo['unionid'] : '';
|
||
$user->save();
|
||
} else {
|
||
//如果没有绑定unionID
|
||
if (!empty($moreInfo['unionid']) && empty($user->unionid)) {
|
||
$user->unionid = $moreInfo['unionid'];
|
||
}
|
||
if (!empty($moreInfo['nickname'])) {
|
||
$user->nickname = $moreInfo['nickname'];
|
||
}
|
||
if (!empty($moreInfo['headimgurl']) && $moreInfo['headimgurl'] != $user->pic) {
|
||
$user->pic = $moreInfo['headimgurl'];
|
||
}
|
||
if (!empty($moreInfo['sex']) && $user->sex == 0) {
|
||
$user->sex = $moreInfo['sex'];
|
||
}
|
||
if (!empty($moreInfo['province']) && $user->province == '') {
|
||
$user->province = $moreInfo['province'];
|
||
}
|
||
if (!empty($moreInfo['city']) && $user->city == '') {
|
||
$user->city = $moreInfo['city'];
|
||
}
|
||
$user->save();
|
||
}
|
||
|
||
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
|
||
$url = $request->url ? urldecode($request->url) : $url;
|
||
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
|
||
$from_openid = $request->from_openid ?? '';
|
||
$merchant_id = $request->merchant_id ?? '';
|
||
$url = $url . 'openid=' . $openId . "&from_openid=" . $from_openid . "&from_platform=" . $request->from_platform . '&merchant_id=' . $merchant_id;
|
||
|
||
return redirect($url);
|
||
}
|
||
|
||
// 直播授权
|
||
public function LiveAuth(Request $request)
|
||
{
|
||
$live_id = $request->input('live_id', 0);
|
||
$from_id = $request->input('from_id', 0);
|
||
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
|
||
$url = $request->url ? urldecode($request->url) : $url;
|
||
$is_new = 0;
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
$moreInfo = $wechatUser->getOriginal();
|
||
$openId = $wechatUser->getId();
|
||
if (empty($openId)) {
|
||
return redirect(env('APP_URL') . '/h5/#/');
|
||
}
|
||
$viewer = Viewer::where('openid', $openId)->first();
|
||
if (empty($viewer)) {
|
||
$viewer = new Viewer();
|
||
$viewer->openid = $openId;
|
||
|
||
$rand_str = $this->randString(10);
|
||
$viewer->nickname = !empty($moreInfo['nickname']) ? $moreInfo['nickname'] : '用户' . $rand_str;
|
||
$viewer->avatar = !empty($moreInfo['headimgurl']) ? $moreInfo['headimgurl'] : 'https://images.ufutx.com/202007/01/e0de60525143427d4dd19515a5b387ba.png';
|
||
|
||
// 处理用户扫描带参二维码后,不点击公众号消息,点击菜单或者其他路径的情况
|
||
$redis_url = Redis::get($openId . 'url');
|
||
//注册页面
|
||
if ($redis_url) {
|
||
$from_id = substr($url, strripos($url, "from_id=") + 8, (strripos($url, "&live_id=") - strripos($url, "from_id=") - 8));
|
||
$live_id = substr($url, strripos($url, "live_id=") + 8);
|
||
$url = $redis_url;
|
||
}
|
||
|
||
if ($request->has('source') && $request->source) {
|
||
$viewer->source = $request->source;
|
||
} else {
|
||
if (str_contains($url, env('APP_URL') . '/h5/#/fLoveEnvoy')) {
|
||
$viewer->source = 'messenger';
|
||
}
|
||
if (str_contains($url, env('APP_URL') . '/h5/#/angelData')) {
|
||
$viewer->source = 'star';
|
||
}
|
||
}
|
||
$viewer->record_url = $url;
|
||
$viewer->viewer_id = !empty($from_id) ? $from_id : 0;
|
||
$viewer->live_id = !empty($live_id) ? $live_id : 0;
|
||
$viewer->sex = !empty($moreInfo['sex']) ? $moreInfo['sex'] : 0;
|
||
$viewer->unionid = !empty($moreInfo['unionid']) ? $moreInfo['unionid'] : '';
|
||
$viewer->save();
|
||
$is_new = 1;
|
||
//分享次数自增长
|
||
Viewer::where('id', $request->from_id)->increment('times');
|
||
//分享奖励
|
||
$this->newViewerShare($request, $viewer);
|
||
|
||
} else {
|
||
//如果没有绑定unionID
|
||
if (!empty($moreInfo['unionid']) && empty($viewer->unionid)) {
|
||
$viewer->unionid = $moreInfo['unionid'];
|
||
}
|
||
if (!empty($moreInfo['nickname']) && mb_substr($viewer->nickname, 0, 2) == '用户') {
|
||
$viewer->nickname = $moreInfo['nickname'];
|
||
}
|
||
if (!empty($moreInfo['headimgurl']) && $moreInfo['headimgurl'] != $viewer->avatar) {
|
||
$viewer->avatar = $moreInfo['headimgurl'];
|
||
}
|
||
if (!empty($moreInfo['sex']) && $viewer->sex == 0) {
|
||
$viewer->sex = $moreInfo['sex'];
|
||
}
|
||
$viewer->save();
|
||
|
||
if ($request->from_id) {
|
||
$this->oldViewerShare($request, $viewer);
|
||
}
|
||
}
|
||
|
||
if (!$request->from_user_id) {
|
||
$from_viewer = Viewer::where('id', $request->from_id)->first();
|
||
if ($from_viewer) {
|
||
if ($from_viewer->user_id) {
|
||
$request->from_user_id = $from_viewer->user_id;
|
||
}
|
||
}
|
||
}
|
||
if (empty($viewer->uuid)) {
|
||
AddUnionUser::dispatch($viewer, $password = $viewer->password, 'LO')->onQueue('love');
|
||
}
|
||
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
|
||
|
||
$redirect_url = $url . 'merchant_id=' . $request->merchant_id . '&openid=' . $openId . "&from_id=" . $from_id . "&from_openid=" . $request->from_openid . "&from_user_id=" . $request->from_user_id . "&from_platform=" . $request->from_platform . '&anchor_openid=' . $request->anchor_openid . '&auth_state=0';
|
||
if ($is_new && $request->activity) {
|
||
$redirect_url .= '&activity=1';
|
||
}
|
||
if ($request->signMarriageID) {
|
||
$redirect_url .= '&signMarriageID=' . $request->signMarriageID;
|
||
}
|
||
if ($request->is_audit) {
|
||
$redirect_url .= '&is_audit=' . $request->is_audit;
|
||
}
|
||
if ($request->merchant_id) {//商户id
|
||
$redirect_url .= '&merchant_id=' . $request->merchant_id;
|
||
}
|
||
if ($request->account_id) {//s端用户id
|
||
$redirect_url .= '&account_id=' . $request->account_id;
|
||
}
|
||
return redirect($redirect_url);
|
||
}
|
||
|
||
public function earningAuth(Request $request)
|
||
{
|
||
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
|
||
$redirect_url = $request->url ? urldecode($request->url) : $url;
|
||
Log::info($redirect_url);
|
||
return redirect($redirect_url);
|
||
}
|
||
|
||
// 非静默授权
|
||
|
||
public function newNonSilenceAuth(Request $request)
|
||
{
|
||
$code = $request->code;
|
||
$jump_url = $request->jump_url ?? 'my';
|
||
// $appid = 'wx36c72a00f1b2be64';
|
||
// $secret = '77f3fa72e17186ecc94ca3038a3ec467';
|
||
$appid = config('wechat.official_account.new.app_id');
|
||
$secret = config('wechat.official_account.new.secret');
|
||
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
|
||
$result = $this->http_request($url);
|
||
$merchant_id = urldecode($request->merchant_id);
|
||
$from_openid = urldecode($request->from_openid);
|
||
$alliance_id = urldecode($request->alliance_id);
|
||
$share_channel_id = urldecode($request->share_channel_id);
|
||
//Log::info("微信信息");
|
||
if ($result && isset($result['access_token'])) {
|
||
$account = MerchantUsers::where('openid', $result['openid'])->first();
|
||
if ($account) {
|
||
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid'];
|
||
$result = $this->http_request($url);
|
||
// session(['test1993'=>$result]);
|
||
$account->nickname = $result['nickname'] ?? $account->nickname;
|
||
$account->sex = $result['sex'] ?? $account->sex;
|
||
$account->city = $result['city'] ?? $account->city;
|
||
$account->province = $result['province'] ?? $account->province;
|
||
$account->pic = $result['headimgurl'] ?? $account->pic;
|
||
$unionid = $result['unionid'] ?? $account->unionid;
|
||
if ($unionid) {
|
||
$merchant_union_id = MerchantUser::where('unionid', $unionid)->value('unionid');
|
||
if (!$merchant_union_id) {
|
||
$account->unionid = $unionid;
|
||
}
|
||
}
|
||
$account->authorize_at = date('Y-m-d H:i:s');
|
||
$account->save();
|
||
}
|
||
}
|
||
$redirect_url = env('APP_URL') . '/pu/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&from_openid=' . $from_openid . '&alliance_id=' . $alliance_id . '&share_channel_id=' . $share_channel_id;
|
||
return redirect($redirect_url);
|
||
|
||
}
|
||
|
||
//分享给新用户
|
||
public function newViewerShare($request, $viewer)
|
||
{
|
||
$from_id = $request->input('from_id', 0);
|
||
$live_id = $request->input('live_id', 0);
|
||
if ($request->from_id) {
|
||
$viewer_share = new ViewerShare();
|
||
$viewer_share->viewer_id = $viewer->id;
|
||
$viewer_share->sharer_id = $from_id;
|
||
$viewer_share->live_id = $live_id;
|
||
$viewer_share->type = 1;
|
||
$viewer_share->is_show = 1;
|
||
$viewer_share->save();
|
||
|
||
if ($request->has('task_id') && $request->task_id && $request->live_id) {
|
||
// //生成审批内容
|
||
// $viewer_share_audit = New ViewerShareAudit();
|
||
// $viewer_share_audit->viewer_id = $request->from_id;
|
||
// $viewer_share_audit->other_viewer_id = $viewer->id;
|
||
// $viewer_share_audit->task_id = $request->task_id ? : 0;
|
||
// $viewer_share_audit->save();
|
||
|
||
//完成任务
|
||
$task = Task::find($request->task_id);
|
||
if ($task && $task->the_rest > 0 && $task->num && $task->type == '直播推广') {
|
||
$list_data['from_id'] = $request->from_id;
|
||
$list_data['task_id'] = $request->task_id;
|
||
$list_data['source_id'] = $request->task_id;
|
||
$list_data['other_viewer_id'] = $viewer->id;
|
||
$list_data['type'] = 'share';
|
||
DoTask::dispatch($list_data)->onQueue('love');
|
||
|
||
$viewer->task_id = $request->task_id;
|
||
$viewer->save();
|
||
}
|
||
} else {
|
||
$param = [
|
||
'sharer_id' => $from_id,
|
||
'viewer_id' => $viewer->id,
|
||
];
|
||
MakeShareCash::dispatch($param)->onQueue('love');
|
||
}
|
||
|
||
//模板消息通知分享人
|
||
// $data['touser'] = Viewer::where('id', $request->from_id)->value('openid');
|
||
// $data['template_id'] = '_s-xlwx8Bj75Cf1UnSJE8HSBCZWFhGoQRdVDf84h3Rw';
|
||
// $data['url'] = env('APP_URL').'/ls/#/shareList';
|
||
//
|
||
// $data['data'] = [
|
||
// 'first' => '您好,有用户通过您的推荐进入平台!',
|
||
// 'keyword1' => $viewer->nickname,
|
||
// 'keyword2' => date('Y-m-d H:i:s'),
|
||
// 'reamrk' => '感谢您的使用',
|
||
// ];
|
||
// SendTemplateMsg::dispatch($data)->onQueue('love');
|
||
}
|
||
return true;
|
||
}
|
||
|
||
//分享给老用户
|
||
public function oldViewerShare($request, $viewer)
|
||
{
|
||
$live_id = $request->input('live_id', 0);
|
||
if ($viewer->id != $request->from_id) {
|
||
$is_shared = ViewerShare::where('viewer_id', $viewer->id)->where('sharer_id', $request->from_id)->where('live_id', $live_id)->count();
|
||
$is_first_shared = ViewerShare::where('viewer_id', $viewer->id)->where('sharer_id', $request->from_id)->count();
|
||
//老用户奖励
|
||
$this->makeOldShareCash($request->from_id, $viewer->id);
|
||
if ($request->from_id && empty($is_shared)) {
|
||
$viewer_share = new ViewerShare();
|
||
$viewer_share->viewer_id = $viewer->id;
|
||
$viewer_share->sharer_id = $request->from_id;
|
||
$viewer_share->type = 2;
|
||
$viewer_share->live_id = $request->live_id ?: 0;
|
||
//首次分享?
|
||
if ($is_first_shared == 0) {
|
||
$viewer_share->is_show = 1;
|
||
}
|
||
$viewer_share->save();
|
||
|
||
//绑定用户与分享人关系
|
||
// if($request->has('live_id') && $request->live_id && $request->from_id != $viewer->id){
|
||
// $live_id = $request->live_id;
|
||
// Redis::zincrby($live_id.'_share_rank', 1 ,$request->from_id);
|
||
// }
|
||
//分享次数自增长
|
||
Viewer::where('id', $request->from_id)->increment('times');
|
||
if ($request->has('live_id') && $request->live_id) {
|
||
$live_id = $request->live_id;
|
||
Redis::zincrby($live_id . '_share_rank', 1, $request->from_id);
|
||
}
|
||
}
|
||
// //分享奖励
|
||
// if($request->from_id){
|
||
// $old_reward = Viewer::where('id', $request->from_id)->value('old_reward');
|
||
// Asset::where('viewer_id', $request->from_id)->increment('cash', $old_reward);
|
||
// }
|
||
}
|
||
return true;
|
||
}
|
||
|
||
public function checkBlockCash($share_id)
|
||
{
|
||
try {
|
||
//判断分享者是否是福恋使者
|
||
$messenger = Messenger::where('viewer_id', $share_id)->where('is_audit', 1)->first();
|
||
if (empty($messenger) || empty($messenger->share_viewer_id)) {
|
||
return;
|
||
}
|
||
//成为福恋使者时间
|
||
$check_date = $messenger->check_date;
|
||
//成为福恋使者后邀请人数
|
||
$count = ViewerShare::where('sharer_id', $share_id)->where('created_at', '>', $check_date)->where('type', 1)->count();
|
||
if ($count >= 10) {//十个用户解冻福恋使者分享者金额
|
||
//福恋使者分享者
|
||
$share_viewer_id = $messenger->share_viewer_id;
|
||
//解冻记录
|
||
$asset_log = AssetLog::where('viewer_id', $share_viewer_id)->where('type', 4)->where('log_id', $share_id)->where('is_hooked', 0)->first();
|
||
if (empty($asset_log)) {
|
||
return;
|
||
}
|
||
\DB::beginTransaction();
|
||
//解冻金额
|
||
$num = $asset_log->num;
|
||
$asset = Asset::where('viewer_id', $share_viewer_id)->first();
|
||
$asset->increment('share_cash', $num);
|
||
$asset->decrement('blocked_cash', $num);
|
||
if ($asset->blocked_cash < 0) {
|
||
throw new \Exception("解冻金额溢出", 1);
|
||
}
|
||
//更新解冻记录
|
||
$asset_log->update([
|
||
'real_num' => $asset_log->num,
|
||
'is_hooked' => 1,
|
||
'score' => bcadd($asset->share_cash, $asset->cash, 2),
|
||
]);
|
||
\DB::commit();
|
||
return;
|
||
}
|
||
} catch (\Exception $e) {
|
||
\DB::rollback();
|
||
\Log::error($e->getMessage());
|
||
return;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 收益规则
|
||
* 第一次分享给老用户收益0.01
|
||
*/
|
||
public function makeOldShareCash($from_id, $viewer_id)
|
||
{
|
||
if (empty($from_id)) {
|
||
return;
|
||
}
|
||
$param = [
|
||
'sharer_id' => $from_id,
|
||
'viewer_id' => $viewer_id
|
||
];
|
||
//是否已经有分享记录
|
||
$h = ViewerShare::where($param)->exists();
|
||
if ($h) {
|
||
return;
|
||
}
|
||
|
||
//产生收益
|
||
MakeOldShareCash::dispatch($param)->onQueue('love');
|
||
}
|
||
|
||
public function getUrlqrcode($url, $size = 100)
|
||
{
|
||
$name = substr($url, stripos($url, '='));
|
||
$path = "../storage/qrcode/$name.png";
|
||
QrCode::format('png')->margin(1)->size($size)->generate($url, $path);
|
||
$pic = $this->uploadFile($path);
|
||
unlink($path);
|
||
return $pic;
|
||
|
||
}
|
||
|
||
//创建token
|
||
public function api_token($account)
|
||
{
|
||
$token = MerchantUsers::where('id', $account->id)->value('api_token');
|
||
if ($token) {
|
||
$result = decrypt($token);
|
||
$time = explode('-', $result)[2];
|
||
if (time() - $time > 604800) {
|
||
$token = encrypt($account->id . '-' . $account->mobile . '-' . time() . '-' . $account->email);
|
||
MerchantUsers::where('id', $account->id)->update(['api_token' => $token]);
|
||
}
|
||
} else {
|
||
$token = encrypt($account->id . '-' . $account->mobile . '-' . time() . '-' . $account->email);
|
||
MerchantUsers::where('id', $account->id)->update(['api_token' => $token]);
|
||
}
|
||
return $token;
|
||
}
|
||
//HTTP请求(支持HTTP/HTTPS,支持GET/POST)
|
||
private function http_request($url, $data = null)
|
||
{
|
||
try {
|
||
$curl = curl_init();
|
||
curl_setopt($curl, CURLOPT_URL, $url);
|
||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
|
||
if (!empty($data)) {
|
||
curl_setopt($curl, CURLOPT_POST, TRUE);
|
||
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
|
||
}
|
||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
|
||
$output = curl_exec($curl);
|
||
curl_close($curl);
|
||
return json_decode($output, true);
|
||
} catch (\Exception $e) {
|
||
// HandleLogs::error('HTTP请求 异常','微信内容安全',$e);
|
||
return '';
|
||
}
|
||
}
|
||
|
||
//登录静默授权
|
||
public function loginAuth(Request $request)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
$openId = $wechatUser->getId();
|
||
//dd(env('APP_URL'));
|
||
$merchat_account = MerchantAccount::where('openid', $openId)->first();
|
||
if ($merchat_account) {
|
||
//增加基表账号
|
||
if (empty($merchat_account->uuid)) {
|
||
AddUnionUser::dispatch($merchat_account, $password = null, 'SOA')->onQueue('love');
|
||
}
|
||
|
||
$url = env('APP_URL') . '/pu_m/#/loginByWeixin?openid=' . $openId;
|
||
|
||
return redirect($url);
|
||
} else {
|
||
$url = env('APP_URL') . '/pu_m/#/login?openid=' . $openId;
|
||
//$url = 'http://192.168.31.230:8080'.'/#/login';
|
||
return redirect($url);
|
||
}
|
||
}
|
||
|
||
//微信静默授权
|
||
public function blessingUserSilenceAuth(Request $request)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
$openId = $wechatUser->getId();
|
||
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
|
||
$url = $request->url ? urldecode($request->url) : $url;
|
||
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
|
||
//$url = 'https://love.ufutx.com/h5/#/discover/blessingHome?';
|
||
|
||
$url = $url . 'openid=' . $openId;
|
||
$bless_user = BlessingUsers::where('openid', $openId)->first();
|
||
if ($bless_user) {
|
||
return redirect($url);
|
||
}
|
||
$bless_user = new BlessingUsers();
|
||
$bless_user->openid = $openId;
|
||
$bless_user->save();
|
||
return redirect($url);
|
||
}
|
||
|
||
public function blessingUserNonSilenceAuth(Request $request)
|
||
{
|
||
$code = $request->code;
|
||
$jump_url = $request->jump_url ?: 'my';
|
||
$appid = 'wx36c72a00f1b2be64';
|
||
$secret = '77f3fa72e17186ecc94ca3038a3ec467';
|
||
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
|
||
$result = $this->http_request($url);
|
||
$alliance_id = urldecode($request->alliance_id);
|
||
$openId = '';
|
||
if ($result && isset($result['access_token'])) {
|
||
$openId = $result['openid'];
|
||
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid'];
|
||
$result = $this->http_request($url);
|
||
$merchant_user = MerchantUsers::where('openid', $openId)->first();
|
||
if ($merchant_user) {
|
||
$merchant_user->unionid = $result['unionid'] ?? null;
|
||
$merchant_user->nickname = $result['nickname'] ?? null;
|
||
$merchant_user->pic = $result['headimgurl'] ?? null;
|
||
$merchant_user->authorize_at = date('Y-m-d H:i:s');
|
||
$merchant_user->save();
|
||
} else {
|
||
$rand_str = $this->randString(8);
|
||
$merchant_user = new MerchantUsers();
|
||
$merchant_user->openid = $openId;
|
||
$merchant_user->unionid = $result['unionid'] ?? null;
|
||
$merchant_user->nickname = $result['nickname'] ?? null;
|
||
$merchant_user->pic = $result['headimgurl'] ?? null;
|
||
$merchant_user->rand_str = $rand_str;
|
||
$merchant_user->authorize_at = date('Y-m-d H:i:s');
|
||
$merchant_user->save();
|
||
}
|
||
}
|
||
$redirect_url = env('APP_URL') . '/al_m/#/' . $jump_url . '?alliance_id=' . $alliance_id . '&openid=' . $openId . '&authorize_at=' . $merchant_user->authorize_at;
|
||
return redirect($redirect_url);
|
||
}
|
||
|
||
//静默授权
|
||
public function silenceAuth(Request $request)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
$openId = $wechatUser->getId();
|
||
$url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/';
|
||
$url = $request->url ? urldecode($request->url) : $url;
|
||
|
||
$alliance_id = $request->alliance_id ?? '';
|
||
$from_openid = $request->from_openid ?? '';
|
||
$url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1);
|
||
$url = $url . 'openid=' . $openId . "&alliance_id=" . $alliance_id . "&from_openid=" . $request->from_openid;
|
||
|
||
$user = MerchantUsers::where('openid', $openId)->first();
|
||
if (!$user) {
|
||
$rand_str = $this->randString(8);
|
||
$user = new MerchantUsers();
|
||
$user->openid = $openId;
|
||
$user->rand_str = $rand_str;
|
||
$user->nickname = '用户' . $rand_str;
|
||
$user->save();
|
||
}
|
||
|
||
if (empty($user->uuid)) {
|
||
//增加基表账号
|
||
AddUnionUser::dispatch($user, $password = null, 'SO')->onQueue('love');
|
||
}
|
||
return redirect($url);
|
||
}
|
||
|
||
/**
|
||
* 绑定商户分享渠道(微信授权)
|
||
*/
|
||
public function bindMerchantShareChannel($share_channel_id)
|
||
{
|
||
try {
|
||
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=该绑定渠道已关闭绑定';
|
||
return redirect($url);
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
if (empty($wechatUser)) {
|
||
// throw new \Exception('微信授权失败');
|
||
$url = request()->getUri();
|
||
return redirect($url);
|
||
}
|
||
$openid = $wechatUser->getId();
|
||
//渠道信息
|
||
$channel = MerchantShareChannel::find($share_channel_id);
|
||
if (empty($channel)) {
|
||
$err_msg = '渠道信息已被删除';
|
||
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg;
|
||
return redirect($url);
|
||
}
|
||
//跳转前端url
|
||
$url = env('APP_URL') . '/pu/#/channelsShare?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id;
|
||
if ($channel->bind_m_id)
|
||
return redirect($url);
|
||
//根据openid获取商户信息
|
||
$merchant = \App\Models\Server\MerchantAccount::where('openid', $openid)->first();
|
||
$owner_merchant = \App\Models\Server\MerchantAccount::with('anchor')->where('id', $channel->m_id)->first();
|
||
if (empty($owner_merchant) || empty($owner_merchant->anchorV2)) {
|
||
$err_msg = '渠道拥有者信息不存在';
|
||
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id;
|
||
return redirect($url);
|
||
}
|
||
if ($merchant && $merchant->mobile) {//存在商户信息并且手机号
|
||
//绑定商户
|
||
$channel->bind_m_id = $merchant->id;
|
||
$channel->save();
|
||
//短信通知 todo
|
||
$url = env('APP_URL') . '/pu/#/channelsShare?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id . '&openid=' . $openid;
|
||
$short_url = \CommonUtilsService::shortUrl($url);
|
||
$message = '恭喜你成为商家' . $owner_merchant->anchorV2->name . '的渠道分享人,赶紧点击' . $short_url['url'] . ' 查看你的渠道分享码吧!';
|
||
SendEasySms::dispatch(['mobile' => $merchant->mobile, 'message' => $message])->onQueue('love');
|
||
} else {
|
||
//跳转前端url
|
||
$url = env('APP_URL') . '/pu/#/bindingChannels?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id . '&openid=' . $openid;
|
||
}
|
||
return redirect($url);
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
$err_msg = '服务器休息,请稍后再试';
|
||
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id;
|
||
return redirect($url);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 绑定商户分享渠道(用户微信授权)
|
||
*/
|
||
public function bindMerchantShareChannelV2($share_channel_id)
|
||
{
|
||
try {
|
||
//微信授权信息
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
if (empty($wechatUser)) {
|
||
$url = request()->getUri();
|
||
return redirect($url);
|
||
}
|
||
$openid = $wechatUser->getId();
|
||
//渠道信息
|
||
$channel = MerchantShareChannel::find($share_channel_id);
|
||
if (empty($channel)) {
|
||
$err_msg = '渠道信息已被删除';
|
||
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=5';
|
||
return redirect($url);
|
||
}
|
||
//跳转前端url
|
||
$url = env('APP_URL') . '/pu/#/channelsShare?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id;
|
||
//渠道已被绑定
|
||
if ($channel->bind_m_user_id) {
|
||
$user = MerchantUser::where('openid', $openid)->first();
|
||
if ($user && $user->id == $channel->bind_m_user_id)
|
||
return redirect($url);
|
||
$err_msg = '该渠道已被其他用户绑定';
|
||
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id;
|
||
return redirect($url);
|
||
}
|
||
//根据openid获取用户信息
|
||
$user = MerchantUser::firstOrCreate(['openid' => $openid]);
|
||
if (empty($user->nickname)) {
|
||
$rand_str = $this->randString(8);
|
||
$user->rand_str = $rand_str;
|
||
$user->pic = User::DefaultAvatar;
|
||
$user->nickname = '用户' . $rand_str;
|
||
$user->save();
|
||
}
|
||
//判断渠道拥有者是否存在
|
||
$owner_merchant = \App\Models\Server\MerchantAccount::with('anchor')->where('id', $channel->m_id)->first();
|
||
if (empty($owner_merchant) || empty($owner_merchant->anchorV2)) {
|
||
$err_msg = '渠道拥有者信息不存在';
|
||
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id;
|
||
return redirect($url);
|
||
}
|
||
//跳转前端绑定url
|
||
$url = env('APP_URL') . '/pu/#/bindingChannels?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id . '&openid=' . $openid;
|
||
return redirect($url);
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
$err_msg = '服务器休息,请稍后再试';
|
||
$url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id;
|
||
return redirect($url);
|
||
}
|
||
}
|
||
|
||
//微信授权 商家绑定微信提现账号
|
||
public function NonSilenceAuthBindWechatTransfer(Request $request)
|
||
{
|
||
$code = $request->code;
|
||
$jump_url = 'bindWeChatPage';
|
||
$appid = config('wechat.official_account.new.app_id');
|
||
$secret = config('wechat.official_account.new.secret');
|
||
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
|
||
$result = $this->http_request($url);
|
||
\Log::info('商家id:' . $request->merchant_id . ' result:' . json_encode($result));
|
||
$merchant_id = $request->merchant_id;
|
||
$m_user_id = $request->merchant_user_id ?? 0;
|
||
$redirect_url = env('APP_URL') . '/h5/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&auth_state=1';
|
||
if ($result && isset($result['access_token'])) {
|
||
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid'];
|
||
$result = $this->http_request($url);
|
||
$transfer = MEarningTransfers::where('m_id', $merchant_id)->where('m_user_id', 0)
|
||
->where('way', 'weixin')
|
||
->where('account', $result['openid'])
|
||
->first();
|
||
if ($transfer) {
|
||
$transfer->nick_name = $result['nickname'];
|
||
$transfer->name = $result['nickname'];
|
||
$transfer->pic = $result['headimgurl'];
|
||
$transfer->save();
|
||
return redirect($redirect_url);
|
||
}
|
||
$transfer = new MEarningTransfers();
|
||
$transfer->m_id = $merchant_id;
|
||
$transfer->m_user_id = 0;
|
||
$transfer->way = 'weixin';
|
||
$transfer->account = $result['openid'];
|
||
$transfer->name = $result['nickname'];
|
||
$transfer->nick_name = $result['nickname'];
|
||
$transfer->pic = $result['headimgurl'] ?? User::DefaultAvatar;
|
||
$transfer->save();
|
||
}
|
||
return redirect($redirect_url);
|
||
}
|
||
|
||
//微信授权 saas用户绑定微信提现账号
|
||
public function NonSilenceAuthBindWechatTransferSaasUser(Request $request)
|
||
{
|
||
$code = $request->code;
|
||
$jump_url = 'IncomeWithdrawal';
|
||
$appid = config('wechat.official_account.new.app_id');
|
||
$secret = config('wechat.official_account.new.secret');
|
||
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
|
||
$result = $this->http_request($url);
|
||
$merchant_id = $request->merchant_id;//商户id
|
||
$m_user_id = $request->account_id;//用户id
|
||
$redirect_url = env('APP_URL') . '/pu/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&auth_state=1';
|
||
if ($result && isset($result['access_token'])) {
|
||
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid'];
|
||
$result = $this->http_request($url);
|
||
$transfer = MEarningTransfers::where('m_id', $merchant_id)->where('m_user_id', $m_user_id)
|
||
->where('way', 'weixin')
|
||
->where('account', $result['openid'])
|
||
->first();
|
||
if ($transfer) {
|
||
$transfer->nick_name = $result['nickname'];
|
||
$transfer->name = $result['nickname'];
|
||
$transfer->pic = $result['headimgurl'];
|
||
$transfer->updated_at = date('Y-m-d H:i:s');
|
||
$transfer->save();
|
||
return redirect($redirect_url);
|
||
}
|
||
$transfer = new MEarningTransfers();
|
||
$transfer->m_id = $merchant_id;
|
||
$transfer->m_user_id = $m_user_id;
|
||
$transfer->way = 'weixin';
|
||
$transfer->account = $result['openid'];
|
||
$transfer->name = $result['nickname'];
|
||
$transfer->nick_name = $result['nickname'];
|
||
$transfer->pic = $result['headimgurl'] ?? User::DefaultAvatar;
|
||
$transfer->save();
|
||
}
|
||
return redirect($redirect_url);
|
||
}
|
||
|
||
//微信授权 h5用户绑定微信提现账号
|
||
public function NonSilenceAuthBindWechatTransferH5User(Request $request)
|
||
{
|
||
$code = $request->code;
|
||
$jump_url = 'accountPage';
|
||
$appid = config('wechat.official_account.new.app_id');
|
||
$secret = config('wechat.official_account.new.secret');
|
||
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
|
||
$result = $this->http_request($url);
|
||
$merchant_id = $request->merchant_id ?? 1;//商户id
|
||
$m_user_id = $request->account_id;//用户id
|
||
$redirect_url = env('APP_URL') . '/h5/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&auth_state=1';
|
||
if ($result && isset($result['access_token'])) {
|
||
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid'];
|
||
$result = $this->http_request($url);
|
||
$transfer = MEarningTransfers::where('m_id', $merchant_id)->where('m_user_id', $m_user_id)
|
||
->where('way', 'weixin')
|
||
->where('account', $result['openid'])
|
||
->first();
|
||
if ($transfer) {
|
||
$transfer->nick_name = $result['nickname'];
|
||
$transfer->name = $result['nickname'];
|
||
$transfer->pic = $result['headimgurl'];
|
||
$transfer->updated_at = date('Y-m-d H:i:s');
|
||
$transfer->save();
|
||
return redirect($redirect_url);
|
||
}
|
||
$transfer = new MEarningTransfers();
|
||
$transfer->m_id = $merchant_id;
|
||
$transfer->m_user_id = $m_user_id;
|
||
$transfer->way = 'weixin';
|
||
$transfer->account = $result['openid'];
|
||
$transfer->name = $result['nickname'];
|
||
$transfer->nick_name = $result['nickname'];
|
||
$transfer->pic = $result['headimgurl'] ?? User::DefaultAvatar;
|
||
$transfer->save();
|
||
}
|
||
return redirect($redirect_url);
|
||
}
|
||
|
||
public function bindNoticeOpenid(Request $request, $merchant_id, $admin_id)
|
||
{
|
||
try {
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
if (empty($wechatUser))
|
||
throw new \Exception('获取微信信息失败');
|
||
$openid = $wechatUser->getId();
|
||
if ($admin_id) {
|
||
MerchantMembers::where('mch_id', $merchant_id)->where('admin_id', $admin_id)->update(['notice_openid' => $openid]);
|
||
} else {
|
||
MerchantAccount::where('id', $merchant_id)->update(['notice_openid' => $openid]);
|
||
}
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
}
|
||
$url = config('app.url') . '/pu/#/adminBinding?merchant_id=' . $merchant_id;
|
||
return redirect($url);
|
||
}
|
||
|
||
public function surveyAuth(Request $request)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
$url = $request->input('url');
|
||
return redirect($url);
|
||
}
|
||
public function tempAuth(Request $request)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
$url = "https://health.ufutx.com/api/temp/oa/second/code?first_openid=" . $wechatUser->getId();
|
||
return redirect($url);
|
||
}
|
||
|
||
public function workServe(Request $request)
|
||
{
|
||
$config = config("wechat.work_program_merchant");
|
||
$app = Factory::work($config);
|
||
|
||
$app->server->push(function ($message) use ($app) {
|
||
Log::info($message);
|
||
if ($message["MsgType"] == "text") {
|
||
SendWorkProgramMessage::dispatch($message)->onQueue("love_gpt");
|
||
return "";
|
||
}
|
||
return "暂时只支持文本内容";
|
||
});
|
||
|
||
$response = $app->server->serve();
|
||
|
||
$res = $response->send();
|
||
}
|
||
|
||
}
|