码速达 - 开放平台

 

【计费规则】

功能类型 单价 规则

请求方式:POST

Content-Type:application/x-www-form-urlencoded

接口地址:

请求参数说明
参数名 类型 提交方式 说明
uid String Post 淘宝用户OpenUid,从用户后台获取,示例:
method String Post 方法名:
timestamp String Post 时间戳(10分钟内有效):
sign String Post

签名,签名原串计算MD5(全小写),签名原串拼接方式如下:

签名原串由用户秘钥参数名参数值组成。除sign之外的所有参数,将参数名连接参数值,按参数名的字典序排列,即按的顺序,首尾相连,最后在头尾两端加上用户秘钥

签名原串计算MD5获得签名。示例签名原串MD5结果为

返回参数
参数名 类型 示例 说明
code String 10000 返回编码,10000代表成功,其余均表示错误
message String 成功 返回消息,错误时返回错误原因
{
    "code": "10000",
    "message": "成功"
}
请求代码示例
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.math.BigInteger;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        try {
            String secret = ""; //用户秘钥
            String uid = ""; //用户OpenUid
            String method = ""; //API方法名
            String timestamp = String.valueOf(System.currentTimeMillis() / 1000L); //时间戳
            //业务参数
            Map<String, String> map = new HashMap<String, String>();
            map.put("uid", uid);
            map.put("method", method);
            map.put("timestamp", timestamp);
            //业务参数
            List<String> keys = new ArrayList(map.keySet()); //SET转LIST
            Collections.sort(keys); //排序
            StringBuffer sb = new StringBuffer(secret); //拼接签名原串
            StringBuffer sb2 = new StringBuffer(); //拼接POST内容
            for (String key : keys) {
                sb.append(key + map.get(key));
                sb2.append(key + "=" + URLEncoder.encode(map.get(key), "UTF-8") + "&");
            }
            sb.append(secret);
            String sign = CalculateMd5(sb.toString()); //签名计算
            sb2.append("sign=" + sign); //添加签名参数
            String result = CallApi(sb2.toString()); //请求API
            System.out.println(result);
        } catch (Exception e) {
        }
    }

    private static String CalculateMd5(String content) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(content.getBytes());
            byte[] digest = md.digest();
            Formatter formatter = new Formatter();
            for (byte b : digest) {
                formatter.format("%02x", b);
            }
            String result = formatter.toString();
            return result;
        } catch (Exception e) {
        }
        return null;
    }

    private static String CallApi(String formData) {
        try {
            URL url = new URL("");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setRequestProperty("Accept", "application/json");
            connection.setDoOutput(true);
            try (OutputStream os = connection.getOutputStream()) {
                byte[] input = formData.getBytes("utf-8");
                os.write(input, 0, input.length);
            }
            try (BufferedReader br = new BufferedReader(
                    new InputStreamReader(connection.getInputStream(), "utf-8"))) {
                StringBuilder response = new StringBuilder();
                String responseLine = null;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                return response.toString();
            }
        } catch (Exception e) {
        }
        return null;
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Web;

namespace Test
{
    public class Program
    {
        static void Main(string[] args)
        {
            string secret = ""; //用户秘钥
            string uid = ""; //用户OpenUid
            string method = ""; //API方法名
            string timestamp = ((long)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds).ToString(); //时间戳
            //业务参数
            Dictionary<string, string> dict = new Dictionary<string, string>();
            dict.Add("uid", uid);
            dict.Add("method", method);
            dict.Add("timestamp", timestamp);
            //业务参数
            StringBuilder sb = new StringBuilder(secret); //拼接签名原串
            StringBuilder sb2 = new StringBuilder(); //拼接POST内容
            foreach (string key in dict.Keys.OrderBy(key => key))
            {
                sb.Append(key + dict[key]);
                sb2.Append(key + "=" + HttpUtility.UrlEncode(dict[key], Encoding.UTF8) + "&");
            }
            sb.Append(secret);
            string sign = CalculateMd5(sb.ToString()); //签名计算
            sb2.Append("sign=" + sign); //添加签名参数
            string result = CallApi(sb2.ToString()); //请求API
            Console.WriteLine(result);
        }

        private static string CalculateMd5(string content)
        {
            var md5 = new MD5CryptoServiceProvider();
            byte[] bytes = Encoding.UTF8.GetBytes(content);
            byte[] bytes2 = md5.ComputeHash(bytes);
            return BitConverter.ToString(bytes2).Replace("-", "").ToLower();
        }

        private static string CallApi(string formData)
        {
            try
            {
                WebClient webClient = new WebClient();
                webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                webClient.Headers.Add("Accept", "application/json");
                webClient.Encoding = Encoding.UTF8;
                string result = webClient.UploadString("", "POST", formData);
                return result;
            }
            catch (Exception e)
            {
            }
            return null;
        }
    }
}
$secret = ''; //用户秘钥
$params = array();
$params['uid'] = ''; //用户OpenUid
$params['method'] = ''; //API方法名
$params['timestamp'] = time(); //时间戳
//业务参数
ksort($params); //排序
$str='';
foreach($params as $k => $v)
{
    $str .= ($k . $v);
    $params[$k] = urlencode($v);
}
$str = $secret . $str . $secret; //拼接签名原串
$sign = md5($str); //签名计算
$params['sign'] = $sign; //添加签名参数
$res = call_api($params); //请求API
echo($res);

function call_api($params) 
{
    $curl = curl_init();
    if (version_compare(phpversion(), '5.4.0', '<')) {
      curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
    } else {
      curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl, CURLOPT_POST, TRUE);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
    curl_setopt($curl, CURLOPT_URL, '');
    $res = curl_exec($curl);
    curl_close ($curl);
    return $res;
}
验签工具

参数说明
参数名 类型 提交方式 说明
topic String Get 消息主题:trade_buyer_pay
pub_time Number Get 原消息发布时间(秒时间戳):
data String Post

消息内容,json格式

属性 示例 说明
sign String Get

签名,签名原串计算MD5(全小写),签名原串拼接方式如下:

datapub_timetopic

签名原串由用户秘钥参数名参数值组成。除sign之外的所有参数,将参数名连接参数值,按参数名的字典序排列,即按content、pub_time、topic的顺序,首尾相连,最后在头尾两端加上用户秘钥

签名原串计算MD5获得签名。示例签名原串MD5结果为

jQuery请求示例
$.ajax('?topic=&pub_time=&sign=', {
    method: 'POST',
    data: '',
    success:function (res) {
        console.log(res);
    },
    error:function (err) {
        console.log(err);
    }
});
签名计算代码示例
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        try {
            String secret = ""; //用户秘钥
            String topic = ""; //消息主题
            String pub_time = ""; //原消息发布时间
            String data = ""; //消息内容
            Map<String, String> map = new HashMap<String, String>();
            map.put("topic", topic);
            map.put("pub_time", pub_time);
            map.put("data", data);
            List<String> keys = new ArrayList(map.keySet()); //SET转LIST
            Collections.sort(keys); //排序
            StringBuffer sb = new StringBuffer(secret); //拼接签名原串
            for (String key : keys) {
                sb.append(key + map.get(key));
            }
            sb.append(secret);
            String sign = CalculateMd5(sb.toString()); //签名计算
            System.out.println(sign);
        } catch (Exception e) {
        }
    }

    private static String CalculateMd5(String content) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(content.getBytes());
            byte[] digest = md.digest();
            Formatter formatter = new Formatter();
            for (byte b : digest) {
                formatter.format("%02x", b);
            }
            String result = formatter.toString();
            return result;
        } catch (Exception e) {
        }
        return null;
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace Test
{
    public class Program
    {
        static void Main(string[] args)
        {
            string secret = ""; //用户秘钥
            string topic = ""; //消息主题
            string pub_time = "";//原消息发布时间
            string data = ""; //消息内容
            Dictionary<string, string> dict = new Dictionary<string, string>();
            dict.Add("topic", topic);
            dict.Add("pub_time", pub_time);
            dict.Add("data", data);
            StringBuilder sb = new StringBuilder(secret); //拼接签名原串
            foreach (string key in dict.Keys.OrderBy(key => key))
            {
                sb.Append(key + dict[key]);
            }
            sb.Append(secret);
            string sign = CalculateMd5(sb.ToString()); //签名计算
            Console.WriteLine(sign);
        }

        private static string CalculateMd5(string content)
        {
            var md5 = new MD5CryptoServiceProvider();
            byte[] bytes = Encoding.UTF8.GetBytes(content);
            byte[] bytes2 = md5.ComputeHash(bytes);
            return BitConverter.ToString(bytes2).Replace("-", "").ToLower();
        }
    }
}
$secret = ''; //用户秘钥
$params = array();
$params['topic'] = ''; //消息主题
$params['pub_time'] = ''; //原消息发布时间
$params['data'] = ''; //消息内容
ksort($params); //排序
$str='';
foreach($params as $k => $v)
{
    $str .= ($k . $v);
}
$str = $secret . $str . $secret; //拼接签名原串
$sign = md5($str); //签名计算
echo($sign);
验签工具
© 2024 - 万码惠