一、写作目的
向外部开发者介绍接入本系统激活码相关模块的步骤。
二、激活码购买步骤
您的用户想要获得激活码有两种方式。下面分别进行介绍。
要想进行如下的操作,请先生成激活码,在开发者平台的激活码管理那个页面可以进行添加。
1.直接在账号平台网站上注册然后在线支付购买。
流程图如下:
2.开发者自己来收款,在系统里给用户发码。
流程图如下:
二、相关接入步骤
您有两种方式进行接入,分别是有登陆方式和无登录方式。
1.有登陆方式
如果您的 APP 愿意使用本账号系统,那么您可以采用这种方式集成。采用这种方式集成之后如下这篇文档里的功能模块则均能使用。
时序图(接口编号为上面的这篇文档里的接口序号):

下面给出一个 Laravel Middleware 例子,便于开发者在自己的服务器上实现验证。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class ApiAuthKey
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$key = \Request::header('Key');
if($key == NULL) {
return response()->json([
'code' => 202
]);
}
try{
$key_obj = json_decode(base64_decode($key), FALSE);
$random_key = $key_obj->random_key;
$expire_in = $key_obj->expire_in;
$signed_key = $key_obj->signed_key;
$user_id = $key_obj->user_id;
$correct_signed_key = md5($random_key.$expire_in.$user_id.env('SIGN_KEY')); //.env里的 SIGN_KEY 即为您在开发者平台里获取的签名 Key
if($expire_in < time()) {
return response()->json([
'code' => 203
]);
}
if($correct_signed_key !== $signed_key) {
return response()->json([
'code' => 204
]);
}
$request["user_id"] = $user_id;
}
catch(\Exception $e){
return response()->json([
'code' => 201
]);
}
return $next($request);
}
}
将这个 Middleware 在您所想要保护的 route 启用,您在 Controller 里即可用如下的方式来获取 User ID:
$user_id = $request->input('user_id');
2.无登录方式
如果您的 APP 里不需要账号体系,您可以选用这种方式来进行集成,那么您就只能使用激活码相关模块,其他功能模块以后会视情况进行开发。
此方式的文档如下:
时序图(接口编号为上面的这篇文档里的接口序号):

下面给出一个 Laravel Middleware 例子,便于开发者在自己的服务器上实现验证。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class ApiAuthKey
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$key = \Request::header('Key');
if($key == NULL) {
return response()->json([
'code' => 202
]);
}
try{
$key_obj = json_decode(base64_decode($key), FALSE);
$random_key = $key_obj->random_key;
$expire_in = $key_obj->expire_in;
$signed_key = $key_obj->signed_key;
$user_email = $key_obj->user_email;
$device_id = $key_obj->device_id;
$correct_signed_key = md5($device_id.$expire_in.$random_key.$user_email.env('SIGN_KEY')); //.env里的 SIGN_KEY 即为您在开发者平台里获取的签名 Key
if($expire_in < time()) {
return response()->json([
'code' => 203
]);
}
if($correct_signed_key !== $signed_key) {
return response()->json([
'code' => 204
]);
}
$request["user_email"] = $user_email;
$request["device_id"] = $device_id;
}
catch(\Exception $e){
return response()->json([
'code' => 201
]);
}
return $next($request);
}
}
将这个 Middleware 在您所想要保护的 route 启用, 同理,您在 Controller 里即可用如下的方式来获取 User Email(即为这个激活码主人的 Email) 以及 Device id:
$device_id = $request->input('device_id');
$user_email = $request->input('user_email');


