Cabinet Api For Bestwond
    Cabinet Api For Bestwond
    • Cabinet Released Api
      • Open device box
        POST
      • Screen display settings
        POST
      • Get device status
        POST
      • Get device box list
        POST
      • Get device list
        POST
      • Get device box log
        POST
    • How to Get Box Door Status
      • User API
        • Get box status api: User API
      • Set api for get box door open status
        POST
      • Get device box door open status
        POST
    • Save And Take By Bw
      • Set orders that can be saved in
        POST
      • Get device box doors that can be stored
        POST
      • Get device box used info
        POST
      • Express storage and retrieval API
        POST
      • Get device box save order info
        POST
      • Set Express storage and retrieval Webhook
        POST
      • Delete Order
        POST
      • Delete Order By Order No
        POST

    Cabinet Released Api

    Before making an API request, it is necessary to sign the parameters and then proceed with the request.

    Step1. Import apifox.json to ApiFox and Set ApiFox Enviroment:#

    api fox5.png
    api fox1.png

    Step2. API fox set 【Pre Processors】Code is:#

    // Obtain an app that is pre-set as an environment variable_ ID and app_ Sceecret
    var app_id = pm.environment.get('app_id')
    var app_secret = pm.environment.get('app_secret')
    
    console.log("app_id==", app_id)
    console.log("app_secret==", app_secret)
    
    var data = pm.request.body.raw;
    console.log("data=", data);
    var sign = pm.execute('sign.py', [data, app_secret]);
    // Get Query Parameter Object
    var queryParams = pm.request.url.query
    pm.environment.set("sign", sign);
    
    console.log(sign);
    
    queryParams.upsert({
      key: 'sign',
      value: sign
    })
    sign.py code:
    import hashlib
    import json
    
    def create_sign(pay_data, mch_key):
        from urllib.parse import urlencode
        npay_data = {}
        pay_data = json.loads(pay_data)
        for k in sorted(pay_data):
            npay_data[k] = pay_data[k]
        params = urlencode(npay_data)
        # print(params)
        stringSignTemp = "{}{}".format(params, mch_key)
        # print("stringSignTemp==", stringSignTemp)
        sign = hashlib.sha512(stringSignTemp.encode('utf-8')).hexdigest()
        return sign
    
    if __name__ == '__main__':
        import sys
        argv = sys.argv[1:]
        a = create_sign(argv[0], argv[1])
        print(a)
    put sign code on external code directory:
    api fox4.png
    api fox2.png

    Step3. Code Test:#

    Python sign code:#

    import hashlib
    
    def create_sign(pay_data, mch_key):
        """
        签名加密
        :param mch_key:
        :param pay_data:
        :return:
        """
        from urllib.parse import urlencode
        npay_data = {}
        for k in sorted(pay_data):
            npay_data[k] = pay_data[k]
        params = urlencode(npay_data)
        print(params)
        stringSignTemp = "{}{}".format(params, mch_key)
        print("stringSignTemp==", stringSignTemp)
        sign = hashlib.sha512(stringSignTemp.encode('utf-8')).hexdigest()
        return sign

    Java open box code:#

    package com.bestwond.test;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.nio.charset.StandardCharsets;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.TreeMap;
    
    public class OpenBoxDemo {
    
        public static String getPost(String url, Map<String, String> heads,
                                     Map<String, String> params) throws IOException {
    
            URL u;
            HttpURLConnection connection = null;
            OutputStream out;
            try {
                u = new URL(url);
                connection = (HttpURLConnection) u.openConnection();
                connection.setRequestMethod("POST");
                connection.setConnectTimeout(30000);
                connection.setReadTimeout(30000);
                connection.setRequestProperty("Content-Type", "application/json");
                connection.setDoOutput(true);
                connection.setDoInput(true);
                if (heads != null) {
                    for (Map.Entry<String, String> stringStringEntry : heads.entrySet()) {
                        connection.setRequestProperty(stringStringEntry.getKey(),
                                stringStringEntry.getValue());
                    }
                }
    
                out = connection.getOutputStream();
                if (params != null && !params.isEmpty()) {
                    out.write(toJSONString(params).getBytes());
                }
                out.flush();
                out.close();
    
                InputStream is = connection.getInputStream();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                int i;
                while ((i = is.read()) != -1) {
                    baos.write(i);
                }
                return baos.toString();
    
            } catch (Exception e) {
                throw e;
            }
        }
    
        public static String toJSONString(Map<String, String> map) {
            Iterator<Map.Entry<String, String>> i = map.entrySet().iterator();
            if (!i.hasNext()) {
                return "{}";
            }
            StringBuilder sb = new StringBuilder();
            sb.append('{');
            for (; ; ) {
    
                Map.Entry<String, String> e = i.next();
                String key = e.getKey();
                String value = e.getValue();
                sb.append("\"");
                sb.append(key);
                sb.append("\"");
                sb.append(':');
                sb.append("\"");
                sb.append(value);
                sb.append("\"");
                if (!i.hasNext()) {
                    return sb.append('}').toString();
                }
                sb.append(',').append(' ');
            }
        }
    
        public static String create_sign(String params, String app_secret) {
            params = params + app_secret;
            byte[] bytes = params.getBytes(StandardCharsets.UTF_8);
            MessageDigest messageDigest;
            try {
                messageDigest = MessageDigest.getInstance("SHA-512");
                messageDigest.update(bytes);
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException("SHA sign error");
            }
            byte[] digest = messageDigest.digest();
            return byteArrayToHexString(digest);
        }
    
        private static String byteArrayToHexString(byte[] bytes) {
            StringBuilder builder = new StringBuilder();
            for (byte b : bytes) {
                String temp = Integer.toHexString(b & 0xFF);
                if (temp.length() == 1) {
                    builder.append("0");
                }
                builder.append(temp);
            }
            return builder.toString();
        }
    
    
        public static void main(String[] args) throws IOException {
            Map<String,String> map =new TreeMap<>((k1, k2)->{
                return k1.compareTo(k2);
            });
    
            map.put("app_id", "bw_de27*******11e");
            map.put("timestamps", String.valueOf(System.currentTimeMillis()/1000));
            map.put("device_number", "200****001");
            map.put("lock_address", "0101");
            map.put("use_type", "S");
    
            StringBuilder sb = new StringBuilder();
            for (Map.Entry<String, String> entry : map.entrySet()) {
                sb.append(entry.getKey() + "=" + entry.getValue() + "&");
            }
            String params = sb.toString();
            if (sb.length() > 0) {
                params = sb.substring(0, sb.length()-1);
            }
            String sign = create_sign(params, "de27690e21f911e**********e198b20");
            map.put("sign", sign);
            Map<String,String> headers = new HashMap<>();
    
            String result = getPost("https://api.bestwond.com/api/iot/open/box/?sign="+sign, headers, map);
            System.out.println(result);
        }
    }
    

    Php open box code:#

    <?php
    $secret = 'de27690e21f911e**********e198b20'; // Signature Secret
    $app_id = 'bw_de27*******11e';
    $fields = array( 'app_id' => $app_id,
                    'device_number' => '200****001',
    				'lock_address' => '0101',
    				'use_type' => 'S',
    				'timestamps' => time());
    ksort($fields);
    echo $fields;
    $sign = hash('SHA512', http_build_query($fields) . $secret);
    echo http_build_query($fields) . $secret;
    echo '-----------iot openbox create sign--------------\n';
    echo $sign;
    echo '-----------iot openbox api test--------------\n';
    echo http_build_query($fields);
    $curl = curl_init();
    echo '-----------iot openbox teststart--------------\n';
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://dgndev.bestwond.com/api/iot/open/box/?sign='.$sign,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS =>json_encode($fields),
      CURLOPT_HTTPHEADER => array(
        'Content-Type: application/json',
       ),
    ));
    echo '-----------$curl--------------\n';
    echo $curl;
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    echo '----------$response-------------\n';
    ?>
    Modified at 2023-07-17 05:42:41
    Next
    Open device box
    Built with