服务热线: 021-20978108

PHP原生代码调用API

http://www.zkibe.com/   来源:ZKIBE纵科   时间:2018/6/26 10:12:34
导读:使用原生代码调用API,PHP调用示例代码(非SDK)PHP调用代码示例:创建如下两个类,并运行,即完成了调用接口(taobao.user.seller.get
使用原生代码调用API,PHP调用示例代码(非SDK)

PHP调用代码示例:

创建如下两个类,并运行,即完成了调用接口(taobao.user.seller.get)的过程
其中包括:
.参数加密
.请求接口调用服务
.调用接口返回结果
.注:该接口是在沙箱环境下调用,获取的数据,也是沙箱中数据。若要获取线上环境,请填写自己创建应用获取过来的appkey,appsecret,并更改调用接口的环境地址,同时修改nick为淘宝登陆名

获取数据


<?php

header("Content-Type:text/html;charset=UTF-8");

require_once 'util.php';

$appKey = 'test';

$appSecret = 'test';

$sessionkey= 'test';

//参数数组

$paramArr = array(

     'app_key' => $appKey,

     'session_key' => $sessionkey,

     'method' => 'taobao.user.seller.get',

     'format' => 'json',

     'v' => '2.0',

     'sign_method'=>'md5',

     'timestamp' => date('Y-m-d H:i:s'),

     'fields' => 'nick,type,user_id',

    // 'nick' => 'sandbox_c_1'

);

//生成签名

$sign = createSign($paramArr);

//组织参数

$strParam = createStrParam($paramArr);

$strParam .= 'sign='.$sign;

//访问服务

$url = 'http://gw.api.tbsandbox.com/router/rest?'.$strParam; //沙箱环境调用地址

$result = file_get_contents($url);

$result = json_decode($result);

echo "json的结构为:";

print_r($result);

echo "<br>";

echo "用户名称为:".$result->user_get_response->user->nick;

echo "<br>";

echo "买家信用等级为:".$result->user_get_response->user->buyer_credit->level;

?>

Util类
using System;

using System.Net;

using System.Collections.Generic;

using System.Text.RegularExpressions;

using System.Text;

using System.IO;

using System.Xml;

using System.Security.Cryptography;

 

namespace APITest

{

public class Util

{

/// <summary>

/// 给TOP请求签名 API v2.0

/// </summary>

/// <param name="parameters">所有字符型的TOP请求参数</param>

/// <param name="secret">签名密钥</param>

/// <returns>签名</returns>

protected static string CreateSign(IDictionary<string, string> parameters, string secret)

{

parameters.Remove("sign");

 

IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters);

IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator();

 

StringBuilder query = new StringBuilder(secret);

while (dem.MoveNext())

{

string key = dem.Current.Key;

string value = dem.Current.Value;

if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))

{

query.Append(key).Append(value);

}

}

query.Append(secret);

 

MD5 md5 = MD5.Create();

byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));

 

StringBuilder result = new StringBuilder();

for (int i = 0; i < bytes.Length; i++)

{

string hex = bytes[i].ToString("X");

if (hex.Length == 1)

{

result.Append("0");

}

result.Append(hex);

}

 

return result.ToString();

}

 

 

/// <summary>

/// 组装普通文本请求参数。

/// </summary>

/// <param name="parameters">Key-Value形式请求参数字典</param>

/// <returns>URL编码后的请求数据</returns>

protected static string PostData(IDictionary<string, string> parameters)

{

StringBuilder postData = new StringBuilder();

bool hasParam = false;

 

IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();

while (dem.MoveNext())

{

string name = dem.Current.Key;

string value = dem.Current.Value;

// 忽略参数名或参数值为空的参数

if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))

{

if (hasParam)

{

postData.Append("&");

}

 

postData.Append(name);

postData.Append("=");

postData.Append(Uri.EscapeDataString(value));

hasParam = true;

}

}

 

return postData.ToString();

}

 

 

/// <summary>

/// TOP API POST 请求

/// </summary>

/// <param name="url">请求容器URL</param>

/// <param name="appkey">AppKey</param>

/// <param name="appSecret">AppSecret</param>

/// <param name="method">API接口方法名</param>

/// <param name="session">调用私有的sessionkey</param>

/// <param name="param">请求参数</param>

/// <returns>返回字符串</returns>

public static string Post(string url, string appkey, string appSecret, string method, string session,

 

IDictionary<string, string> param)

{

 

#region -----API系统参数----

 

param.Add("app_key", appkey);

param.Add("method", method);

param.Add("session", session);

param.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

param.Add("format", "xml");

param.Add("v", "2.0");

param.Add("sign_method", "md5");

param.Add("sign", CreateSign(param, appSecret));

 

#endregion

 

string result = string.Empty;

 

#region ---- 完成 HTTP POST 请求----

 

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

req.Method = "POST";

req.KeepAlive = true;

req.Timeout = 300000;

req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";

byte[] postData = Encoding.UTF8.GetBytes(PostData(param));

Stream reqStream = req.GetRequestStream();

reqStream.Write(postData, 0, postData.Length);

reqStream.Close();

HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();

Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);

Stream stream = null;

StreamReader reader = null;

stream = rsp.GetResponseStream();

reader = new StreamReader(stream, encoding);

result = reader.ReadToEnd();

if (reader != null) reader.Close();

if (stream != null) stream.Close();

if (rsp != null) rsp.Close();

#endregion

return Regex.Replace(result, @"[\x00-\x08\x0b-\x0c\x0e-\x1f]", "");

}

}

}
欧美市场
代购市场观察
华人淘宝代购
如何建立代购网站
淘宝开放平台公告
1688开放平台公告
多语言淘宝代购
代购网站推广
如何做淘宝代购
东南亚市场
俄罗斯市场
代购网站功能解析
京东开放平台公告
淘宝代购运营管理
代购开放平台
非洲市场