| 功能类型 | 单价 | 规则 |
|---|
请求方式: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结果为 |
$.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);