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:
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:
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';
?>
Last modified: 2 年前