love_php/app/Http/Controllers/WechatController.php
2026-04-02 09:20:51 +08:00

1564 lines
66 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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();
}
}