生成签名时需要注意一下几点:
- 签名的参数必须按照字符顺序从小到大排序(字典排序);
- 如果参数的值为空不参与签名,如JAVA中参数值为null的,不会参与签名("" 与 '' 认 为非空,需要参与签名);
- 如果是其他语言参数值为null的值又是必填参数,需要把把该值处理成""空字符串。
- 如果参数的值里有utf-8的空格需要单独把utf-8的空格转成ASCII的空格。
- 参数名区分大小写;
- 在向WINIT发送HTTP请求时必须使用正确的编码格式(默认UTF-8);
认证失败排查工具:
路径:http://developer.winit.com.cn/tool/auth.html
生成签名步骤:
- 登录开放平台网站 沙箱环境:http://developer.demo.winit.com.cn/platform/index/login.html 用户名:rebecca ,密码:888;
- 登录成功后进入http://developer.demo.winit.com.cn/platform.php/apply/index.html?ref=addtabs 我的应用。
- 创建应用的步骤 http://developer.winit.com.cn/document/detail/id/127.html。
- 应用创建成功后会拿到这(client_id,client_secret,token)三个参数。
- 签名认证规则 http://developer.winit.com.cn/document/detail/id/6.html
php生成的签名案例:
public $account = 'rebecca';//万邑通账户 public $token = '89435277FA3BA112DE795553598E-'; public $client_id = 'ZTFIMTM0MZQTZTNHOS12ZWVMLWI8OTATNJHHMJU0DJVHNWRM'; public $client_secret = 'NGMXODAXN2UTYMM0NS20OTKWLTLLOTATADDIN2M5ZDU2NZC0NDI4NJK2MJQ4NJU2NTK0NQ=='; public $code = 'create-order';//应用code(platform) public $create_action = 'isp.order.createOrder';//接口名称 public $testUrl = 'http://openapi.sandbox.winit.com.cn/openapi/service';//沙箱环境 public $version = '1.0';//版本 public $timeStamp = '2021-05-05 12:25:26';//调用接口时实时更新这个值 public $format = 'json';//数据格式 public $language = 'zh_CN';//语言 public $sign_method = 'md5';//加密方式 /* * 公共签名拼接 */ private function _get_common_sign_param($action,$data){ $str = ''; $str .= 'action'.$action; $str .= 'app_key'.$this->account; $str .= 'data'.json_encode($data, JSON_UNESCAPED_UNICODE); $str .= 'format'.$this->format; $str .= 'platform'.$this->code; $str .= 'sign_method'.$this->sign_method; $str .= 'timestamp'.$this->timeStamp; $str .= 'version'.$this->version; return $str; }
Sign签名:
/* * 生成sign */ private function _get_sign($action,$data){ $common_param_str = $this->token.$this->_get_common_sign_param($action,$data).$this->token; $sign = strtoupper(md5($common_param_str)); return $sign; }
Client Sign签名:
/* * 生成client_sign */ private function _get_client_sign($action,$data){ $common_param_str = $this->client_secret.$this->_get_common_sign_param($action,$data).$this->client_secret; $client_sign = strtoupper(md5($common_param_str)); return $client_sign; }