云虎H5商城

云虎H5商城


API总体说明

<p><strong>1、基础API交互地址:</strong> 请将该地址全局保存,所有接口共用地址,基础URL由H5站点地址拼接而成,重点是取地址参数cmid和acdb, 如H5站的地址是https://h5.yunhu365.com/h5.aspx?cmid=12116&amp;acdb=st0908_1 则通过以下示例代码获得API地址是https://h5.yunhu365.com/ErpServer/h5api/12116/st0908_1</p> <pre><code class="language-language"> function GetServerURL () { //获取浏览器中域名的部分 var domain = window.location.origin; //获取浏览器中参数部分cmid=12116&amp;amp;acdb=st0908_1 var search = window.location.search.toLowerCase(); //解析参数部分 var params = new URLSearchParams(search); //获取参数cmid的值 var cmid = params.get(&amp;quot;cmid&amp;quot;); var acdb = params.get(&amp;quot;acdb&amp;quot;); var serverurl = domain + &amp;quot;/ErpServer/h5api/&amp;quot; + cmid + &amp;quot;/&amp;quot; + acdb; return serverurl; }</code></pre> <p><strong>2、HTTP交互方式</strong>:获取数据、提交数据均使用POST</p> <p><strong>3、全局参数</strong>: 建议以下参数在请求拦截中加入,以免每个接口单独加入该参数 <strong>4、token</strong>: 用户注册或登录成功后的身份标识,每个接口都传入该参数,以请求header的方式传入,没有值为空即可则视为未注册或未登录。 <strong>5、校验密钥</strong>:注册或登录成功后返回校验密钥,请存为全局变量,在后续的各交易参与校验 <strong>6、数据校验</strong>:</p> <ol> <li>只有在数据请求时进行校验,接收数据时无需校验。请求校验时的参数名为sign。 除sign字段外,所有参数按照字段名的ascii码从小到大排序后使用QueryString的格式(即key1=value1&amp;key2=value2…)拼接而成,空值不传递,不参与签名组串。</li> <li>签名原始串中,字段名和字段值都采用原始值进行拼接组串,不进行URL Encode</li> <li>签名时将字符串转化成字节流时指定的编码字符集应与参数charset一致,采用utf-8</li> <li>token的值和sign的值放header中传递,密钥不传递</li> <li>MD5签名计算公式:sign = Md5(原字符串&amp;key=密钥+token).toUpperCase()</li> </ol> <p>如假登录后的密钥=1234、token是5678,则: (1)参数方式时sign=Md5(abc=1&amp;bcd=2&amp;cde=3&amp;name=张三&amp;key=12345678).toUpperCase() 给服务器传递的数据是:abc=1&amp;bcd=2&amp;cde=3&amp;name=张三 (2)json方式时则sign=MD5(json=data&amp;key=12345678).toUpperCase() 则给服务器传的是JSON的data数据</p> <p>如假未登录则密钥为空、token为空,header中传空字符串(不是传null),则: (1)参数方式时sign=Md5(abc=1&amp;bcd=2&amp;cde=3&amp;name=张三).toUpperCase() 给服务器传递的数据是:abc=1&amp;bcd=2&amp;cde=3&amp;name=张三 (2)json方式时则sign=MD5(json=data).toUpperCase() 则给服务器传的是JSON的data数据</p> <p><strong>7、数据返回结构</strong>:</p> <pre><code class="language-language">{ &amp;quot;code&amp;quot;: 0, &amp;quot;msg&amp;quot;: &amp;quot;帐号或密码错误&amp;quot;, &amp;quot;data&amp;quot;: {} }</code></pre> <p>说明:code是错误码,1表示成功,0表示失败,2店铺未上线,3店铺已关闭,4店铺已到期,5请登录,6超时过期或未登录,7参数签名不正确,8用户未注册,9账号或密码不正确,10手机号已注册,11用户名已注册,12邮箱已注册,其它值待定。 msg是消息,如错误提示 data是数据,是一个JSON对象。 一般是先判断code,为0则提示msg,为1再处理data,这三项值均不会为空。 <strong>8、向服务器传递JSON示例</strong>(实际使用中将函数postdata定义为全局函数供数据交互时调用):</p> <pre><code class="language-language">//全局对象AppConfig存放服务器传来的数据 var AppConfig = {}; AppConfig.serverurl = &amp;quot;基础交互的API地址,根据JS代码函数GetServerURL获取&amp;quot;; AppConfig.token = &amp;quot;用户登录后服务器传来的token&amp;quot;; AppConfig.singkey = &amp;quot;用户登录后服务器传来的密钥&amp;quot;; AppConfig.userid = 0;//用户登录后服务器传来的用户id AppConfig.username = &amp;quot;aname&amp;quot;;//用户登录后服务器传来的用户名 function postdata() { //构造请求数据 var obj = new Object(); //必须要有actionName,userid,usernane obj.actionName = &amp;quot;接口名称&amp;quot;; obj.userid = AppConfig.userid; obj.username = AppConfig.username; obj.openid = &amp;quot;&amp;quot;; obj.appid = &amp;quot;&amp;quot;; //传递参数 obj.params1 = &amp;quot;value1&amp;quot;; obj.params2 = &amp;quot;value2&amp;quot;; //传递数组列表 obj.list = new Array(); obj.list.push(&amp;quot;list1&amp;quot;); obj.list.push(&amp;quot;list2&amp;quot;); //传递对象 obj.objone = new Object(); obj.objone.name = &amp;quot;objone&amp;quot;; obj.objone.value = &amp;quot;valueone&amp;quot;; //传递对象数组列表 obj.objlist = new Array(); var obj1 = new Object(); obj1.name = &amp;quot;obj1&amp;quot;; obj1.value = &amp;quot;value1&amp;quot;; obj.objlist.push(obj1); var obj2 = new Object(); obj2.name = &amp;quot;obj2&amp;quot;; obj2.value = &amp;quot;value2&amp;quot;; obj.objlist.push(obj2); //将对象obj转换为json字符串 var jsondata = JSON.stringify(obj); //数据签名 var sign = &amp;quot;&amp;quot;; if (AppConfig.token == null || AppConfig.token.length == 0) sign = hex_md5(&amp;quot;json=&amp;quot; + jsondata); else sign = hex_md5(&amp;quot;json=&amp;quot; + jsondata + &amp;quot;&amp;amp;key=&amp;quot; + AppConfig.singkey + AppConfig.token); sign = sign.toUpperCase(); //发送请求 var xhr = new XMLHttpRequest(); xhr.open('POST', AppConfig.serverurl, true); xhr.setRequestHeader('Content-Type', 'application/json'); //在header中传递token xhr.setRequestHeader('token', AppConfig.token); //将sign放在header中传递 xhr.setRequestHeader('sign', sign); xhr.onload = function () { if (this.status == 200) { var res = this.responseText; if (res == null || res.length==0) { alert(&amp;quot;返回数据为空&amp;quot;); return; } //解析返回数据 var obj = JSON.parse(res); if (obj.code == 1) { alert(&amp;quot;成功&amp;quot;); } else { alert(obj.msg); if (obj.code == 2) { //店铺未上线,跳转店铺建立中的页面 } else if (obj.code == 3) { //店铺已关闭,跳转到警请期待页面 } else if (obj.code == 4) { //店铺已到期,跳转到续费页面 } else if (obj.code == 5) { //请重新登录,跳转到登录页面 } else if (obj.code == 6) { //超时或未登录,跳转到登录页面 } else if (obj.code == 7) { //签名不正确,跳转到登录页面 } } } }; //发送数据 xhr.send(jsondata); }</code></pre> <p><strong>9、发送给api的数据格式</strong>:JSON中的参数名、属性名、字段名是区分大小写的</p> <table> <thead> <tr> <th>序号</th> <th>参数名</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>actionName</td> <td>接口名称</td> </tr> <tr> <td>2</td> <td>userid</td> <td>用户ID,用户登录后由服务器传来</td> </tr> <tr> <td>3</td> <td>username</td> <td>用户名,用户登录后由服务器传来</td> </tr> <tr> <td>4</td> <td>其它参数</td> <td>根据接口的需要传递的其它参数</td> </tr> </tbody> </table> <pre><code class="language-language">{ &amp;quot;actionName&amp;quot;: &amp;quot;userlogin&amp;quot;, &amp;quot;userid&amp;quot;: 1, &amp;quot;username&amp;quot;: &amp;quot;张三&amp;quot; ... }</code></pre>

页面列表

ITEM_HTML