一、写作目的
向外部开发者介绍接入本系统激活码相关模块的步骤。
二、激活码购买步骤
您的用户想要获得激活码有两种方式。下面分别进行介绍。
要想进行如下的操作,请先生成激活码,在开发者平台的激活码管理那个页面可以进行添加。
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');