Verify.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. * 人机验证
  4. */
  5. namespace sms;
  6. use afs\Request\V20180112 as Afs;
  7. class Verify
  8. {
  9. protected $accesskey_id;
  10. protected $accesskey_secret;
  11. public function __construct ()
  12. {
  13. $this->accesskey_id = env('aliyun.access_key', '');
  14. $this->accesskey_secret = env('aliyun.secret_key', '');
  15. }
  16. /**
  17. * 人机验证
  18. * @param string $app_key
  19. * @param string $scene
  20. * @param string $sessionId
  21. * @param string $token
  22. * @param string $sig
  23. * @return bool
  24. */
  25. public function ali_verify ($app_key = '', $scene = '', $sessionId = '', $token = '', $sig = '')
  26. {
  27. if (env('aliyun.verify_appkey', '') != $app_key || env('aliyun.verify_scene', '') != $scene) return false;
  28. include_once __DIR__ . '/../aliyun-afs/aliyun-php-sdk-core/Config.php';
  29. //YOUR ACCESS_KEY、YOUR ACCESS_SECRET请替换成您的阿里云accesskey id和secret
  30. $iClientProfile = \DefaultProfile::getProfile("cn-hangzhou", env('aliyun.access_key', ''), env('aliyun.secret_key', ''));
  31. $client = new \DefaultAcsClient($iClientProfile);
  32. \DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", "afs", "afs.aliyuncs.com");
  33. $request = new Afs\AuthenticateSigRequest();
  34. $request->setSessionId($sessionId);// 必填参数,从前端获取,不可更改,android和ios只传这个参数即可
  35. $request->setToken($token);// 必填参数,从前端获取,不可更改
  36. $request->setSig($sig);// 必填参数,从前端获取,不可更改
  37. $request->setScene($scene);// 必填参数,从前端获取,不可更改
  38. $request->setAppKey($app_key);//必填参数,后端填写
  39. $request->setRemoteIp(app('request')->ip());//必填参数,后端填写
  40. $response = $client->getAcsResponse($request);//返回code 100表示验签通过,900表示验签失败
  41. $response = object_array($response);
  42. sr_log($response);
  43. if ($response['Code'] == 100) { //验签成功
  44. return true;
  45. }
  46. return false;
  47. }
  48. /**
  49. * 生成签名
  50. * @param $data
  51. * @return string
  52. */
  53. public function get_sign ($data)
  54. {
  55. unset($data['sign']);
  56. $str = '68j5r28xc1v21ya0a66ecef62b4edfdcc1fe' . '2';
  57. foreach ($data as $k => $v) {
  58. $str .= $k;
  59. if (is_array($v)) {
  60. foreach ($v as $kk => $vv) {
  61. $str .= $kk;
  62. $str .= $vv;
  63. }
  64. } else {
  65. $str .= $v;
  66. }
  67. }
  68. for ($i = 0; $i < strlen($str); $i++) {
  69. $temp_str = ord($str[$i]);
  70. $change_after[$i] = $temp_str;
  71. }
  72. sort($change_after);
  73. $str = '';
  74. for ($i = 0; $i < count($change_after); $i++) {
  75. $str .= chr($change_after[$i]);
  76. }
  77. $str = preg_replace('/[^a-zA-Z0-9]/s', '', $str);
  78. $sign_me = strtoupper(MD5($str));
  79. return $sign_me;
  80. }
  81. }