You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
432 lines
13 KiB
432 lines
13 KiB
<?php
|
|
namespace app\api\controller\wanlshop;
|
|
|
|
use app\common\controller\Api;
|
|
use addons\wanlshop\library\WanlChat\WanlChat;
|
|
use addons\wanlshop\library\WanlPay\WanlPay;
|
|
|
|
use think\View;
|
|
use think\Log;
|
|
|
|
/**
|
|
* WanlShop 回调接口
|
|
*/
|
|
class Callback extends Api
|
|
{
|
|
protected $noNeedLogin = ['*'];
|
|
protected $noNeedRight = ['*'];
|
|
|
|
|
|
public function _initialize()
|
|
{
|
|
parent::_initialize();
|
|
|
|
}
|
|
/**
|
|
* 接收快递100推送消息
|
|
*
|
|
* @ApiSummary (WanlShop 快递接口-接收快递100推送消息)
|
|
* @ApiMethod (POST)
|
|
*
|
|
* @param string $status 物流状态 polling:监控中,shutdown:结束,abort:中止,updateall:重新推送
|
|
* @param array $lastResult 最新物流动态
|
|
*/
|
|
public function kuaidi()
|
|
{
|
|
//设置过滤方法
|
|
$this->request->filter(['strip_tags']);
|
|
if ($this->request->isPost()) {
|
|
$kuaidi = model('app\api\model\wanlshop\KuaidiSub');
|
|
$post = $this->request->post();
|
|
// 接收消息
|
|
try {
|
|
$param = json_decode($post["param"], true);
|
|
$status = $param['status']; // 状态 polling:监控中,shutdown:结束,abort:中止,updateall:重新推送
|
|
$message = $param['lastResult']['message']; // 消息体
|
|
$state = $param['lastResult']['state']; // 快递单当前状态,包括0在途,1揽收,2疑难,3签收,4退签,5派件,6退回,7转投
|
|
$ischeck = $param['lastResult']['ischeck']; // 是否签收标记
|
|
$nu = $param['lastResult']['nu']; // 快递单号
|
|
$com = $param['lastResult']['com']; // 快递公司编码
|
|
$data = $param['lastResult']['data']; // 数组,包含多个对象,每个对象字段如展开所示
|
|
// 查询快递是否存在
|
|
$express = $kuaidi->get(['express_no' => $nu]);
|
|
if($express){
|
|
// 判断来源
|
|
if($post["sign"] != strtoupper(md5($post["param"].$express['sign']))){
|
|
return json(["result" => false, "returnCode" => "405", "message" => "校验码错误"]);
|
|
}
|
|
// 更新数据
|
|
$express->message = $message;
|
|
$express->status = $status;
|
|
$express->state = $state;
|
|
$express->ischeck = $ischeck;
|
|
$express->com = $com;
|
|
$express->data = json_encode($data);
|
|
$express->save();
|
|
// 判断更新状态
|
|
if($express){
|
|
return json(["result" => true, "returnCode" => "200", "message" => "接收成功"]);
|
|
}
|
|
}else{
|
|
return json(["result" => false, "returnCode" => "404", "message" => "快递单号不存在"]);
|
|
}
|
|
} catch (Exception $e) {
|
|
return json(["result" => false, "returnCode" => "500", "message" => "服务器错误"]);
|
|
}
|
|
}
|
|
return json(["result" => false, "returnCode" => "500", "message" => "非正常访问"]);
|
|
}
|
|
|
|
/**
|
|
* 推流状态回调
|
|
*
|
|
* @ApiSummary (WanlShop 直播接口-推流状态回调)
|
|
* @ApiMethod (POST)
|
|
*
|
|
* @param string $action 回调状态 publish / publish_done
|
|
* @param string $ip 回调地址ip
|
|
* @param string $id 推流流名
|
|
* @param string $app 推流域名
|
|
* @param string $appname 推流app名
|
|
* @param string $time timestamp
|
|
* @param string $usrargs 用户参数
|
|
* @param string $node 内部节点ip
|
|
*/
|
|
public function push($id, $action)
|
|
{
|
|
$row = model('app\api\model\wanlshop\Live')->get(['liveid' => $id]);
|
|
$find = model('app\api\model\wanlshop\find\Find');
|
|
if($row){
|
|
if($action == 'publish'){
|
|
$this->sendLiveGroup($id, ['type' => 'publish']);
|
|
$row->save(['state' => 1]);
|
|
// 避免多次推流,检查是否存在多个
|
|
$count = $find->where('live_id', $row['id'])->count();
|
|
// 发布动态
|
|
if($count == 0){
|
|
// 关联商品
|
|
$goods = model('app\api\model\wanlshop\Goods')
|
|
->where('id', 'in', $row['goods_ids'])
|
|
->limit(2)
|
|
->select();
|
|
$image = [$row['image']];
|
|
foreach ($goods as $vo) {
|
|
$image[] = $vo['image'];
|
|
}
|
|
// 1.1.2升级
|
|
$shop = model('app\api\model\wanlshop\Shop')->get($row['shop_id']);
|
|
$user = model('app\api\model\wanlshop\find\User')->get([
|
|
'user_id' => $shop['user_id']
|
|
]);
|
|
// 保存数据
|
|
$find->save([
|
|
'shop_id' => $shop['id'],
|
|
'user_id' => $shop['user_id'], // 1.1.2升级
|
|
'user_no' => $user['user_no'], // 1.1.2升级
|
|
'type' => 'live',
|
|
'goods_ids' => $row['goods_ids'],
|
|
'live_id' => $row['id'],
|
|
'content' => $row['content'],
|
|
'images' => implode(',', $image)
|
|
]);
|
|
}
|
|
}else if($action == 'publish_done'){
|
|
$this->sendLiveGroup($id, ['type' => 'publish_done']);
|
|
$row->save(['state' => 2]);
|
|
}
|
|
}else{
|
|
$this->error(__('没有找到相关推流'));
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* 录制文件回调
|
|
*
|
|
* @ApiSummary (WanlShop 直播接口-录制文件回调)
|
|
* @ApiMethod (POST)
|
|
*
|
|
* @param string $domain 回调状态 publish / publish_done
|
|
* @param string $app 回调地址ip
|
|
* @param string $stream 推流流名
|
|
* ------------------------------------
|
|
* @param string $event record_started/record_paused/record_resumed
|
|
*-------------------------------------
|
|
* @param string $uri 推流域名
|
|
* @param string $duration 推流app名
|
|
* @param string $start_time timestamp
|
|
* @param string $stop_time 用户参数
|
|
*/
|
|
public function record()
|
|
{
|
|
if ($this->request->isPost()) {
|
|
$event = $this->request->post('event');
|
|
$stream = $this->request->post('stream');
|
|
$uri = $this->request->post('uri');
|
|
|
|
if($event == 'record_started'){
|
|
// 录制开始
|
|
}else if($event == 'record_paused'){
|
|
// 录制暂停
|
|
}else if($event == 'record_resumed'){
|
|
// 录制继续
|
|
}else{
|
|
// 录制成功
|
|
if($uri && $stream){
|
|
$config = get_addon_config('wanlshop');
|
|
$live = model('app\api\model\wanlshop\Live')
|
|
->where('liveid', $stream)
|
|
->find();
|
|
// 修改CND拼接域名 1.1.2升级
|
|
$live->save(['recordurl' => ($config['live']['sslSwitch'] == 'Y' ? 'https://' : 'http://') . $config['live']['liveCnd'] . '/' . $uri]);
|
|
// 修改发现状态 1.1.4升级
|
|
$find = model('app\api\model\wanlshop\find\Find')
|
|
->where('live_id', $live['id'])
|
|
->find();
|
|
if($find){
|
|
$find->save(['state' => 'normal']);
|
|
}
|
|
}else{
|
|
$this->error(__('录制失败'));
|
|
}
|
|
}
|
|
}
|
|
$this->error(__('非正常访问'));
|
|
}
|
|
//file:///C:/Users/WanlShop/Desktop/wanlshop-1.1.3/application/api/controller/wanlshop/Callback.php
|
|
|
|
/**
|
|
* 安全审核
|
|
*
|
|
* @ApiSummary (WanlShop 直播接口-安全审核)
|
|
* @ApiMethod (POST)
|
|
*
|
|
* @param string $DomainName 用户域名
|
|
* @param string $AppName App名
|
|
* @param string $StreamName 流名
|
|
* @param string $OssEndpoint 存储对象 Endpoint
|
|
* @param string $OssBucket 存储对象的 Bucket
|
|
* @param string $OssObject 存储对象的文件名
|
|
* @param array $Result 参数
|
|
*/
|
|
public function detectporn($StreamName, $Result)
|
|
{
|
|
$res = $Result[0]['Result'][0];
|
|
if($res['Suggestion'] == 'block'){ // 违规
|
|
$live = model('app\api\model\wanlshop\Live')->get(['liveid' => $StreamName]);
|
|
model('app\api\model\wanlshop\find\Find')->where(['live_id' => $live['id']])->delete();
|
|
$live->save(['gestion' => $res['Scene'], 'state' => 3]);
|
|
// 封禁直播间
|
|
$this->sendLiveGroup($StreamName, ['type' => 'ban']);
|
|
|
|
}else if($res['Suggestion'] == 'review'){ // 直播间存在违规
|
|
$this->sendLiveGroup($StreamName, [
|
|
'type' => 'review',
|
|
'text' => '直播间存在违规,请主播及时更正'
|
|
]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 视频点播回调
|
|
*
|
|
* @ApiSummary (WanlShop 视频接口-视频点播回调)
|
|
* @ApiMethod (POST)
|
|
*
|
|
* https://help.aliyun.com/document_detail/55627.html
|
|
*/
|
|
public function vod()
|
|
{
|
|
if ($this->request->isPost()) {
|
|
$server = $this->request->server();
|
|
$params = $this->request->post();
|
|
$config = get_addon_config('wanlshop');
|
|
if($server['HTTP_X_VOD_SIGNATURE'] == md5($this->request->url(true).'|'.$server['HTTP_X_VOD_TIMESTAMP'].'|'.$config['video']['privateKey']) && $params['Status'] == 'success'){
|
|
$data = [];
|
|
$videoId = $params['EventType'] == 'AIMediaAuditComplete' ? $params['MediaId'] : $params['VideoId'];
|
|
// 创建视频
|
|
if($params['EventType'] == 'FileUploadComplete'){
|
|
$video = model('app\api\model\wanlshop\Video');
|
|
$video->video_id = $videoId;
|
|
$video->state = 'screenshot';
|
|
$video->save();
|
|
// 发现更新条件
|
|
$data['state'] = 'screenshot';
|
|
}else{
|
|
$videoData = model('app\api\model\wanlshop\Video')
|
|
->where('video_id', $videoId)
|
|
->find();
|
|
// 视频截图完成
|
|
if($params['EventType'] == 'SnapshotComplete'){
|
|
$videoData->save([
|
|
'cover_url' => $params['CoverUrl'], // 封面图片地址
|
|
'snapshots' => $params['Snapshots'], // 截图列表---
|
|
'state' => 'transcoding'
|
|
]);
|
|
// 发现更新条件
|
|
$data['images'] = implode(",", $params['Snapshots']);
|
|
$data['state'] = 'transcoding';
|
|
}
|
|
// 智能审核完成
|
|
if($params['EventType'] == 'AIMediaAuditComplete'){
|
|
$state = 'pass';
|
|
// 发现更新条件
|
|
$complete = json_decode($params['Data'], true);
|
|
if($complete['Suggestion'] == 'block'){
|
|
$state = 'hazard';
|
|
$data['state'] = $state;
|
|
}else{
|
|
$data['state'] = $state;
|
|
}
|
|
// 更新视频
|
|
$videoData->save([
|
|
'suggestion' => $complete['Suggestion'],
|
|
'state' => $state
|
|
]);
|
|
}
|
|
// 视频转码完成
|
|
if($params['EventType'] == 'TranscodeComplete'){
|
|
$stream = $params['StreamInfos'][0];
|
|
// 更新视频
|
|
$videoData->save([
|
|
'bitrate' => $stream['Bitrate'], // 视频流码率,单位:Kbps
|
|
'definition' => $stream['Definition'], // 视频流清晰度定义
|
|
'duration' => $stream['Duration'], // 视频流长度,单位:秒
|
|
'url' => $stream['FileUrl'], // 视频流的播放地址
|
|
'format' => $stream['Format'], // 视频流格式
|
|
'fps' => $stream['Fps'], // 视频流帧率,每秒多少帧
|
|
'height' => $stream['Height'], // 视频流高度,单位:px
|
|
'width' => $stream['Width'], // 视频流宽度,单位:px
|
|
'size' => $stream['Size'], // 视频流大小,单位:Byte
|
|
'fit' => $stream['Height'] > $stream['Width'] ? 'cover' : 'contain', // 视频的表现形式
|
|
'state' => 'normal'
|
|
]);
|
|
// 发现更新条件
|
|
$data['state'] = 'normal';
|
|
}
|
|
}
|
|
// 查询FIND是否已存在
|
|
$find = model('app\api\model\wanlshop\find\Find')
|
|
->where('video_id', $videoId)
|
|
->find();
|
|
// 更新状态
|
|
if($find){
|
|
if($find['state'] == 'examine'){
|
|
$data['state'] = 'examine';
|
|
}
|
|
$find->save($data);
|
|
}
|
|
$this->success();
|
|
}
|
|
}
|
|
$this->error(__('非正常访问'));
|
|
}
|
|
|
|
/**
|
|
* 支付成功回调
|
|
*
|
|
* @ApiSummary (WanlShop 支付接口-支付成功回调)
|
|
* @ApiMethod (POST)
|
|
*
|
|
*/
|
|
public function notify($type)
|
|
{
|
|
if(empty($type)){
|
|
$this->error(__('非正常访问'));
|
|
}
|
|
$wanlpay = new WanlPay($type);
|
|
$result = $wanlpay->notify();
|
|
if($result['code'] == 200){
|
|
return $result['msg'];
|
|
}else{
|
|
Log::write($result, 'debug');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 支付成功回调
|
|
*
|
|
* @ApiSummary (WanlShop 支付接口-支付成功回调)
|
|
* @ApiMethod (POST)
|
|
*
|
|
*/
|
|
public function notify_recharge($type)
|
|
{
|
|
if(empty($type)){
|
|
$this->error(__('非正常访问'));
|
|
}
|
|
$wanlpay = new WanlPay($type);
|
|
$result = $wanlpay->notify_recharge();
|
|
if($result['code'] == 200){
|
|
return $result['msg'];
|
|
}else{
|
|
Log::write($result, 'debug');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 退款回调 1.1.5升级
|
|
*
|
|
* @ApiSummary (WanlShop 支付接口-支付成功回调)
|
|
* @ApiMethod (POST)
|
|
*
|
|
*/
|
|
public function notify_refund($type)
|
|
{
|
|
if(empty($type)){
|
|
$this->error(__('非正常访问'));
|
|
}
|
|
$wanlpay = new WanlPay($type);
|
|
$result = $wanlpay->notify_refund();
|
|
if($result['code'] == 200){
|
|
return $result['msg'];
|
|
}else{
|
|
Log::write($result, 'debug');
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 支付成功返回
|
|
*
|
|
* @ApiSummary (WanlShop 支付接口-支付成功返回)
|
|
* @ApiMethod (POST)
|
|
*
|
|
*/
|
|
public function return($type)
|
|
{
|
|
if(empty($type)){
|
|
$this->error(__('非正常访问'));
|
|
}
|
|
$view = new View();
|
|
$wanlpay = new WanlPay($type);
|
|
$config = get_addon_config('wanlshop');
|
|
$view->row = $wanlpay->return();
|
|
$view->config = $config['h5'];
|
|
return $view->fetch('index@wanlshop/page/success');
|
|
}
|
|
|
|
/**
|
|
* 发送直播群组消息
|
|
* 内部方法
|
|
*/
|
|
private function sendLiveGroup($group, $message)
|
|
{
|
|
$wanlchat = new WanlChat();
|
|
$wanlchat->sendGroup($group, [
|
|
'type' => 'live',
|
|
'group' => $group,
|
|
'form' => [
|
|
'id' => 0,
|
|
'nickname' => '系统'
|
|
],
|
|
'message' => $message,
|
|
'online' => 0,
|
|
'like' => 0
|
|
]);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|