jxg/jinxiangguo-master/app/Models/Didi.php

202 lines
6.2 KiB
PHP
Executable File

<?php
namespace App\Models;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;
class Didi
{
private $config = null;
public function __construct()
{
$this->config = config('didi');
}
public function generateLink($source_id, $activity_id, $link_type = 'h5')
{
$url = $this->config['domain'] . '/openapi/v1.0/link/generate';
$source_id = (string)$source_id;
$activity_id = (int)$activity_id;
$Timestamp = time();
$param_to_sign = [
"App-Key" => $this->config['app_key'],
"Timestamp" => $Timestamp,
"source_id" => $source_id,
"activity_id" => $activity_id,
"link_type" => $link_type,
"promotion_id" => $this->config['promotion_id'],
];
$header = [
"App-Key" => $this->config['app_key'],
"Timestamp" => $Timestamp,
"Sign" => $this->get_sign($param_to_sign),
"Content-Type" => 'application/json',
];
$result = Http::withHeaders($header)->post($url, [
"source_id" => $source_id,
"activity_id" => $activity_id,
"link_type" => $link_type,
"promotion_id" => $this->config['promotion_id'],
])->json();
return $result['data'] ?? [];
}
public function generateCode($source_id, $activity_id, $dsi, $type = 'h5')
{
$url = $this->config['domain'] . '/openapi/v1.0/code/generate';
$source_id = (string)$source_id;
$activity_id = (int)$activity_id;
$Timestamp = time();
$param_to_sign = [
"App-Key" => $this->config['app_key'],
"Timestamp" => $Timestamp,
"dsi" => $dsi,
"source_id" => $source_id,
"activity_id" => $activity_id,
"type" => $type,
"promotion_id" => $this->config['promotion_id'],
];
$header = [
"App-Key" => $this->config['app_key'],
"Timestamp" => $Timestamp,
"Sign" => $this->get_sign($param_to_sign),
];
$result = Http::withHeaders($header)->get($url, [
"source_id" => $source_id,
"activity_id" => $activity_id,
"type" => $type,
"dsi" => $dsi,
"promotion_id" => $this->config['promotion_id'],
])->json();
return $result['data'] ?? [];
}
public function generatePoster($source_id, $activity_id, $dsi)
{
$url = $this->config['domain'] . '/openapi/v1.0/poster/generate';
$source_id = (string)$source_id;
$activity_id = (int)$activity_id;
$Timestamp = time();
$param_to_sign = [
"App-Key" => $this->config['app_key'],
"Timestamp" => $Timestamp,
"source_id" => $source_id,
"activity_id" => $activity_id,
"promotion_id" => $this->config['promotion_id'],
"dsi" => $dsi,
];
$header = [
"App-Key" => $this->config['app_key'],
"Timestamp" => $Timestamp,
"Sign" => $this->get_sign($param_to_sign),
];
$result = Http::withHeaders($header)->get($url, [
"source_id" => $source_id,
"activity_id" => $activity_id,
"dsi" => $dsi,
"promotion_id" => $this->config['promotion_id'],
])->json();
return $result['data'] ?? [];
}
public function generatePwd($source_id, $activity_id)
{
$url = $this->config['domain'] . '/openapi/v1.0/exchange/pwd/generate';
$source_id = (string)$source_id;
$activity_id = (int)$activity_id;
$Timestamp = time();
$param_to_sign = [
"App-Key" => $this->config['app_key'],
"Timestamp" => $Timestamp,
"source_id" => $source_id,
"activity_id" => $activity_id,
"pwd_type" => 'coupon',
"promotion_id" => $this->config['promotion_id'],
];
$header = [
"App-Key" => $this->config['app_key'],
"Timestamp" => $Timestamp,
"Sign" => $this->get_sign($param_to_sign),
];
$result = Http::withHeaders($header)->get($url, [
"source_id" => $source_id,
"activity_id" => $activity_id,
"pwd_type" => 'coupon',
"promotion_id" => $this->config['promotion_id'],
])->json();
return $result['data'] ?? [];
}
public function generate($source_id, $activity_id)
{
$data = Cache::get($source_id . ":" . $activity_id);
if ($data) {
return $data;
}
$link = $this->generateLink($source_id, $activity_id);
if (!$link) {
return [];
}
$link_mini = $this->generateLink($source_id, $activity_id, 'mini');
$code = $this->generateCode($source_id, $activity_id, $link['dsi']);
$poster = $this->generatePoster($source_id, $activity_id, $link['dsi']);
$data = [
'link_h5' => $link['link'],
'app_id' => $link_mini['app_id'],
'app_source' => $link_mini['app_source'],
'link_mini' => $link_mini['link'],
'code_link' => $code['code_link'],
'poster_link' => $poster['poster_link'],
];
Cache::put($source_id . ":" . $activity_id, $data, 60 * 60 * 24);
return $data;
}
public static function callback($data)
{
if (empty($data['source_id'])){
return ['code' => 1, 'msg' => 'source_id is empty'];
}
PlatformCallback::query()->create([
'platform' => $data['platform'],
'body' => json_encode($data),
'source_id' => $data['source_id'],
]);
return ['code' => 0, 'msg' => 'ok'];
}
public function reward_callback()
{
}
private function get_sign($pr)
{
$accesskey = $this->config['access_key'];
ksort($pr);
$ptr = array();
foreach ($pr as $key => $val) {
array_push($ptr, $key . "=" . $val);
}
$source = urlencode(implode("&", $ptr)) . $accesskey;
$sign = urlencode(base64_encode(sha1($source)));
return $sign;
}
}