快递查询和电子面单数据服务接口(API)
- 格式:pdf
- 大小:1.47 MB
- 文档页数:19
快递鸟电子面单接口说明文档快递鸟2017-04-25版本一、前言1、业务背景随着电子商务和物流信息化服务的迅猛发展,电子面单已经成为了商家快速发货并连接订单与物流的有力工具。
快递鸟电子面单接口是快递鸟提供给独立电商、仓储管理系统、打单软件、物流供应链等物流系统平台使用的物流下单接口,满足商家在线发货需求并提供打印电子面单的服务。
商家通过贵司系统选择物流公司发送请求通知快递公司有快递要发货,贵公司把数据通过此接口转发到快递鸟,由快递鸟为商家通知对应的快递公司快递员上门取件。
电子面单成功下单后,快递鸟系统内将自动订阅,一旦轨迹发生变化时,快递鸟将调用贵司推送接收接口将物流信息反向推送至商家。
同时若客户使用代收货款服务,快递鸟会将代收货款的货款状态独立推送给商家用户。
电子面单具有如下特点:●打印效率高相比传统针式打印机套打模式,打印速度提升6-8倍,热敏打印机打印速度平均30-40张/分。
●发货效率高包裹出库时减少了抽底单的工序,降低了操作成本、提升操作效率,运单和订单即时绑定,无需人工再次扫描绑定发货。
目前商家在使用电子面单的过程中也存在一些情况导致部分用户无法顺畅使用,例如:●大电商有多家合作快递公司,各家快递公司的模板尺寸不一,需要使用多个打印机打印面单。
●单号作废后回收机制不完善导致电商成本升高。
●二联电子面单无底单,运费核账存在问题(部分商家货物重量以称重为准)。
●打印时发现面单号余额不足,耽误发货。
●小B电商发货量不够申请网点的电子面单服务。
快递鸟电子面单接口为解决客户以上问题,新增如下解决方案:●电子面单余量查询:可通过电子面单余量查询接口查询,并且在快递鸟官网可设置余额不足提醒值(后续会加上余额不足短信/邮件提醒功能)●电子面单取消/回收:可通过电子面单取消接口,回收部分加盟快递公司的面单号。
●通用电子面单模板,含二联、三联模板●快递公司电子面单客户号在线申请●散户模式电子面单:部分快递公司无需申请电子面单客户号即可直接打印电子面单。
常用快递接口,顺丰快递接口api对接调用顺丰快递是常用快递,电商、ERP等企业都需要对接其快递接口api。
对接有两种方式,第一和顺丰快递直接对接,第二,和快递鸟对接,和快递鸟对接可以一次性接入其他常用快递的接口。
快递100有顺丰接口,不过只能查询不能打印电子面单,而且是收费的,菜鸟有电子面单接口,但又不支持顺丰快递。
接口平台:快递鸟免费查询接口接口地址:http://ap /Ebusiness/EbusinessOrd erHandle.aspx支持格式:json请求方式:HTTP POST请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"。
顺丰快递接口api申请JSON请求/返回示例:1.请求{"OrderCode": "","ShipperCode": "SF","LogisticCode": "118650888018"}2.返回没有物流轨迹的{"EBusinessID": "1109259","Traces": [],"OrderCode": "","ShipperCode": "SF","LogisticCode": "118461988807","Success": false,"Reason": null}有物流轨迹的{"EBusinessID": "1109259","OrderCode": "","ShipperCode": "SF","LogisticCode": "118461988807","Success": true,"State": 3,"Reason": null,"Traces": [{"AcceptTime": "2014/06/25 08:05:37","AcceptStation": "正在派件..(派件人:邓裕富,电话:187****6310)[深圳市]","Remark": null},{"AcceptTime": "2014/06/25 04:01:28","AcceptStation": "快件在深圳集散中心,准备送往下一站深圳[深圳市]","Remark": null},{"AcceptTime": "2014/06/25 01:41:06","AcceptStation": "快件在深圳集散中心[深圳市]","Remark": null},{"AcceptTime": "2014/06/24 20:18:58","AcceptStation": "已收件[深圳市]","Remark": null},{"AcceptTime": "2014/06/24 20:55:28","AcceptStation": "快件在深圳,准备送往下一站深圳集散中心[深圳市]", "Remark": null},{"AcceptTime": "2014/06/25 10:23:03","AcceptStation": "派件已签收[深圳市]","Remark": null},{"AcceptTime": "2014/06/25 10:23:03","AcceptStation": "签收人是:已签收[深圳市]","Remark": null}]}注:接口及签名说明1)、支持http传输协议2)、支持的数据传输格式Json/Xml(暂不支持<content/>这种形式)。
快递单号查询api 开发快递查询应用程序快递单号查询api是对外开放的应用程序接口,基于该API开发自己的快递查询应用程序。
接口名称:快递单号查询api接口平台:聚合数据接口地址:/exp/index支持格式:JSON/XML请求方式:HTTP POST/GET请求示例:/exp/index?key=key&com=sf&no=575677355677请求参数:名称类型必填说明com string 是需要查询的快递公司编号no string 是需要查询的订单号key string 是应用APPKEY(应用详细页查询)dtype string 否返回数据的格式,xml或json,默认json调用样例及调试工具:API测试工具返回字段:名称类型说明参考JSON返回示例- -快递单号查询api JSON返回示例:{"resultcode":"200",/*返回标识码*/"reason":"查询成功!","result":{"company":"顺丰","com":"sf","no":"575677355677","list":[{"datetime":"2013-06-25 10:44:05", /*时间*/"remark":"已收件", /*描述*/"zone":"台州市" /*区域*/},{"datetime":"2013-06-25 11:05:21","remark":"快件在台州,准备送往下一站台州集散中心","zone":"台州市"},{"datetime":"2013-06-25 20:36:02","remark":"快件在台州集散中心,准备送往下一站台州集散中心","zone":"台州市"},{"datetime":"2013-06-25 21:17:36","remark":"快件在台州集散中心,准备送往下一站杭州集散中心","zone":"台州市"},{"datetime":"2013-06-26 12:20:00","remark":"快件在杭州集散中心,准备送往下一站西安集散中心","zone":"杭州市"},{"datetime":"2013-06-27 05:48:42","remark":"快件在西安集散中心,准备送往下一站西安","zone":"西安市/咸阳市"},{"datetime":"2013-06-27 08:03:03","remark":"正在派件..","zone":"西安市/咸阳市"},{"datetime":"2013-06-27 08:51:33","remark":"派件已签收","zone":"西安市/咸阳市"},{"datetime":"2013-06-27 08:51","remark":"签收人是:已签收","zone":"西安市/咸阳市"}]"status": "1", /*0或1,1表示签收或退回*/}}快递单号查询api XML返回示例:<root><resultcode>200</resultcode><reason>查询成功!</reason><result><company>顺丰</company><com>sf</com><no>575677355677</no><list><item><datetime>2013-06-25 10:44:05</datetime><remark>已收件</remark><zone>台州市</zone></item><item><datetime>2013-06-25 11:05:21</datetime><remark>快件在台州,准备送往下一站台州集散中心</remark><zone>台州市</zone></item><item><datetime>2013-06-25 20:36:02</datetime><remark>快件在台州集散中心,准备送往下一站台州集散中心</remark><zone>台州市</zone></item><item><datetime>2013-06-25 21:17:36</datetime><remark>快件在台州集散中心,准备送往下一站杭州集散中心</remark><zone>台州市</zone></item><item><datetime>2013-06-26 12:20:00</datetime><remark>快件在杭州集散中心,准备送往下一站西安集散中心</remark><zone>杭州市</zone></item><item><datetime>2013-06-27 05:48:42</datetime><remark>快件在西安集散中心,准备送往下一站西安</remark><zone>西安市/咸阳市</zone></item><item><datetime>2013-06-27 08:03:03</datetime><remark>正在派件..</remark><zone>西安市/咸阳市</zone></item><item><datetime>2013-06-27 08:51:33</datetime><remark>派件已签收</remark><zone>西安市/咸阳市</zone></item><item><datetime>2013-06-27 08:51</datetime><remark>签收人是:已签收</remark><zone>西安市/咸阳市</zone></item></list><status>1</status></result></root>。
请求代码示例↓支持6中开发语言对接,包括JAVA,C#,PHP,Python,Node.js,Crul;根据您的开发语言,选择参考对应的代码示例,下面以PHP代码为例:1$host = "https:///api";2$method = "POST";3$headers = array();4//根据API的要求,定义相对应的Content-Type5array_push($headers,"Content-Type".":"."application/x-www-form-urlencoded;charset=UTF-8");6$querys = "";7$bodys = [8 "app_id"=>'50001',9 "method"=>'.get',10 "sign"=>"bdf3b5f50865ac813cbdfd6c9b572b79",11 "ts"=>'1524209949',12 "data"=>'{ "waybill_no":"物流单号多个的以英文逗号分隔","exp_company_code":"品牌简称"}'13 ];14$bodys = http_build_query($bodys);15$url = $host;16$curl = curl_init();17curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);18curl_setopt($curl, CURLOPT_URL, $url);19curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);20curl_setopt($curl, CURLOPT_FAILONERROR, false);21curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);22curl_setopt($curl, CURLOPT_HEADER, true);23if (1 == strpos("$".$host, "https://"))24 {25curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);26curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);27 }28curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys);29var_dump(curl_exec($curl));成功响应示例↓响应(成功、失败)示例,仅支持JSON格式。
快递单号查询API接口对接后可以在自己的网站点击查询就能查到物流轨迹,像京东淘宝查询物流的功能一样,适合一些自己研发的系统商、微信小程序,还有自己的电商网站。
方法/步骤
进入快递鸟网站下载对接相关的接口文档,和接口demo案例,接口demo案例可以直接调用,不用自己编写代码。
如果需要自己编写,可以参照接口文档
另外即时查询API、物流跟踪API和在途监控API都是查询快递的,可以根据不同情况对接使用
在右上角注册账号登录后进行账号认证,就可以对接接口了
在账号登录后首页可以查看接口ID和接口KEY,复制到demo中的“EBusinessID”和“AppKey”两个参数中,demo就可以使用了
对接完成后就是在调试平台调试接口,对比请求报文和返回报文确认对接是不是正确的。
这里需要注意的是,对接的是什么接口,就查看什么接口的调试报文
测试后就可以正式调用了,正式调用的时候在正式地址调用
最后做一个物流轨迹的数据展现就可以了,如下图。
1.申请一个快递鸟的帐号获取授权申请/reg快递鸟的帐号使永久免费的,且申请了立即就能用的,也不需要审核。
2.按照单号识别接口和即时查询接口封装好数据3.获取返回的 json 数据输出import jsonimport urllibimport urllib.requestimport hashlibimport base64import urllib.parse# 此处为快递鸟官网申请的帐号和密码APP_id = "1266271"APP_key = "7526a46e-3a2a-4f5b-8659-d72f361e3386"def encrypt(origin_data, appkey):"""数据内容签名:把(请求内容(未编码)+AppKey)进行MD5加密,然后Base64编码""" m = hashlib.md5()m.update((origin_data+appkey).encode("utf8"))encodestr = m.hexdigest()base64_text = base64.b64encode(encodestr.encode(encoding='utf-8'))return base64_textdef sendpost(url, datas):"""发送post请求"""postdata = urllib.parse.urlencode(datas).encode('utf-8')header = {"Accept": "application/x-www-form-urlencoded;charset=utf-8","Accept-Encoding": "utf-8"}req = urllib.request.Request(url, postdata, header)get_data = (urllib.request.urlopen(req).read().decode('utf-8'))return get_datadef get_company(logistic_code, appid, appkey, url):"""获取对应快递单号的快递公司代码和名称"""data1 = {'LogisticCode': logistic_code}d1 = json.dumps(data1, sort_keys=True)requestdata = encrypt(d1, appkey)post_data = {'RequestData': d1,'EBusinessID': appid,'RequestType': '2002','DataType': '2','DataSign': requestdata.decode()}json_data = sendpost(url, post_data)sort_data = json.loads(json_data)return sort_datadef get_traces(logistic_code, shipper_code, appid, appkey, url):"""查询接口支持按照运单号查询(单个查询)"""data1 = {'LogisticCode': logistic_code, 'ShipperCode': shipper_code}d1 = json.dumps(data1, sort_keys=True)requestdata = encrypt(d1, appkey)post_data = {'RequestData': d1, 'EBusinessID': appid, 'RequestType': '1002', 'DataType': '2','DataSign': requestdata.decode()}json_data = sendpost(url, post_data)sort_data = json.loads(json_data)return sort_datadef recognise(expresscode):"""输出数据"""url = ':8081/Ebusiness/EbusinessOrderHandle.aspx' data = get_company(expresscode, APP_id, APP_key, url)if not any(data['Shippers']):print("未查到该快递信息,请检查快递单号是否有误!")else:print("已查到该", str(data['Shippers'][0]['ShipperName'])+"("+str(data['Shippers'][0]['ShipperCode'])+")", expresscode)trace_data = get_traces(expresscode, data['Shippers'][0]['ShipperCode'], APP_id, APP_key, url)if trace_data['Success'] == "false" or not any(trace_data['Traces']): print("未查询到该快递物流轨迹!")else:str_state = "问题件"if trace_data['State'] == '2':str_state = "在途中"if trace_data['State'] == '3':str_state = "已签收"print("目前状态: "+str_state)trace_data = trace_data['Traces']item_no = 1for item in trace_data:print(str(item_no)+":", item['AcceptTime'],item['AcceptStation'])item_no += 1print("\n")returnwhile True:code = input("请输入快递单号(Esc退出):")code = code.strip()if code == "esc":breakrecognise(code)【疑问解答】1、问题:快递鸟接口有并发要求吗?快递鸟即时查询接口并发不超过10次/秒,物流跟踪接口订阅不超过30次/秒,电子面单接口下单不超过20次/秒。
电子面单API相关API接口的详细说明(白皮书)以及快递公司电子面单模版:http://y /s/17EkwPYdX79 (提取码:1e1gZz)一、前言1. 业务背景随着电子商务平台和物流服务信息化飞速发展,面单号(或称之为运单号)成为物流服务商串联快递单、订单、商家、商品等各种信息的枢纽。
相比之下,传统纸质面单价格高、信息录入效率低、信息安全隐患等方面的劣势已愈发凸显。
近一年来,电子面单的普及已是大势所趋。
究其原因,是因为电子面单具备的独特优势:a. 效率更高n 提升打印效率:电子面单的打印效率是普通纸质面单的4-6倍,平均每单打印只需花费1-2秒钟,高效率的打单大大缓解电商等客户的大批量打单压力,轻松应对大促;n 提高发货效率:电子面单不需要把快递单和定单信息逐一匹配操作,在订单信息申请快递单号的时候就已完成了定单匹配;卖家无需再安排人员专门抽取“发货联”,操作效率进一步提升;减少了手写“大头笔”等动作,提高了分拣效率;提高了分拣的准确性;n 支持多种电商增值业务,无需人肉绑定面单(例如:货到付款,预约配送)。
b. 成本更低n 电子面单的纸张是0.1元/张,成本比传统纸质面单0.2-0.3元降低了一大半;n 降低快递公司作业成本,如取消抽单和手写大头笔,单位时间内的揽货可以提升一倍以上;c. 数据信息完整实效n 在申请电子面单运单号的时候,就匹配到具体的“大头笔”信息,既减少人工操作的成本并又可以提高准确率和效率;商家在使用电子面单的时候就会自动将数据同步给快递公司,可以在申请面单的时候就拿到第一手数据,更加真实并且提高速度。
2. 名词解释3. 特殊说明3.1 云栈平台所用到编码参考规范a. 物流服务商(cp_code) :顺丰(SF)、EMS(标准快递:EMS;经济快件:EYB)、宅急送(ZJS)、圆通(YTO)、中通(ZTO)、百世汇通(HTKY)、优速(UC)、申通(STO)、天天快递 (TTKDEX)、全峰 (QFKD)、快捷(FAST)、邮政小包(POSTB)、国通(GTO)、韵达(YUNDA)b. 订单来源:订单产生的电商平台淘宝(TB)、天猫(TM)、京东(JD)、当当(DD)、拍拍(PP)、易讯(Y X)、ebay(EBAY)、QQ网购(QQ)、亚马逊(AMAZON)、苏宁(SN)、国美(GM)、唯品会(WPH)、聚美(JM)、乐蜂(LF)、蘑菇街(MGJ)、聚尚(JS)、拍鞋(PX)、银泰(YT)、1号店(YHD)、凡客(VANCL)、邮乐(Y L)、优购(YG)、阿里巴巴(1688)、其他(OTHERS)3.2 电子面单接入流程1.申请开通电子面单接口权限包. 技术问题交流群:2508358362.沙箱环境开发接口,测试。
免费物流查询API接口对接案例这是来自快递鸟的一个快递查询的api接口,支持快递单号查询,接口不错,分享给大家。
接口申请地址:/regPHP代码<?php//电商IDdefined('EBusinessID') or define('EBusinessID', 1237100);//电商加密私钥,注意保管,不要泄漏defined('AppKey') or define('AppKey', '518a73d8-1f7f-441a-b644-33e77b49d846');//请求urldefined('ReqURL') or define('ReqURL', '/Ebusiness/EbusinessOrderHandle.aspx');/*** Json方式查询订单物流轨迹*/function getOrderTracesByJson(){$requestData= "{'OrderCode':'','ShipperCode':'SF','LogisticCode':'589707398027'}";$datas = array('EBusinessID' => EBusinessID,'RequestType' => '1002','RequestData' => urlencode($requestData) ,'DataType' => '2',);$datas['DataSign'] = encrypt($requestData, AppKey);$result=sendPost(ReqURL, $datas);//根据公司业务处理返回的信息......return $result;}/*** XML方式查询订单物流轨迹*/function getOrderTracesByXml(){$requestData= "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"."<Content>"."<OrderCode></OrderCode>"."<ShipperCode>SF</ShipperCode>"."<LogisticCode>589707398027</LogisticCode>"."</Content>";$datas = array('EBusinessID' => EBusinessID,'RequestType' => '1002','RequestData' => urlencode($requestData) ,'DataType' => '1',);$datas['DataSign'] = encrypt($requestData, AppKey);$result=sendPost(ReqURL, $datas);//根据公司业务处理返回的信息......return $result;}/*** post提交数据* @param string $url 请求Url* @param array $datas 提交的数据* @return url响应返回的html*/function sendPost($url, $datas) {$temps = array();foreach ($datas as $key => $value) {$temps[] = sprintf('%s=%s', $key, $value);}$post_data = implode('&', $temps);$url_info = parse_url($url);if($url_info['port']==''){$url_info['port']=80;}echo $url_info['port'];$httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n";$httpheader.= "Host:" . $url_info['host'] . "\r\n";$httpheader.= "Content-Type:application/x-www-form-urlencoded\r\n";$httpheader.= "Content-Length:" . strlen($post_data) . "\r\n";$httpheader.= "Connection:close\r\n\r\n";$httpheader.= $post_data;$fd = fsockopen($url_info['host'], $url_info['port']);fwrite($fd, $httpheader);$gets = "";$headerFlag = true;while (!feof($fd)) {if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n")) {break;}}while (!feof($fd)) {$gets.= fread($fd, 128);}fclose($fd);return $gets;}/*** 电商Sign签名生成* @param data 内容* @param appkey Appkey* @return DataSign签名*/function encrypt($data, $appkey) {return urlencode(base64_encode(md5($data.$appkey)));}?>.NET代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web;using ;using System.IO;namespace KdGoldAPI{public class KdApiSearchDemo{//电商IDprivate string EBusinessID = "1237100";//电商加密私钥,注意保管,不要泄漏private string AppKey = "518a73d8-1f7f-441a-b644-33e77b49d846";//请求urlprivate string ReqURL = "/Ebusiness/EbusinessOrderHandle.aspx";/// <summary>/// Json方式查询订单物流轨迹/// </summary>/// <returns></returns>public string getOrderTracesByJson(){string requestData = "{'OrderCode':'','ShipperCode':'SF','LogisticCode':'589707398027'}";Dictionary<string, string> param = new Dictionary<string, string>();param.Add("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8));param.Add("EBusinessID", EBusinessID);param.Add("RequestType", "1002");string dataSign = encrypt(requestData, AppKey, "UTF-8");param.Add("DataSign", HttpUtility.UrlEncode(dataSign, Encoding.UTF8));param.Add("DataType", "2");string result = sendPost(ReqURL, param);//根据公司业务处理返回的信息......return result;}/// <summary>/// XML方式查询订单物流轨迹/// </summary>/// <returns></returns>public string getOrderTracesByXml(){string requestData = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +"<Content>" +"<OrderCode></OrderCode>" +"<ShipperCode>SF</ShipperCode>" +"<LogisticCode>589707398027</LogisticCode>" +"</Content>";Dictionary<string, string> param = new Dictionary<string, string>();param.Add("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8));param.Add("EBusinessID", EBusinessID);param.Add("RequestType", "1002");string dataSign = encrypt(requestData, AppKey, "UTF-8");param.Add("DataSign", HttpUtility.UrlEncode(dataSign, Encoding.UTF8));param.Add("DataType", "1");string result = sendPost(ReqURL, param);//根据公司业务处理返回的信息......return result;}/// <summary>/// Post方式提交数据,返回网页的源代码/// </summary>/// <param name="url">发送请求的URL</param>/// <param name="param">请求的参数集合</param>/// <returns>远程资源的响应结果</returns>private string sendPost(string url, Dictionary<string, string> param){string result = "";StringBuilder postData = new StringBuilder();if (param != null && param.Count > 0){foreach (var p in param){if (postData.Length > 0){postData.Append("&");}postData.Append(p.Key);postData.Append("=");postData.Append(p.Value);}}byte[] byteData = Encoding.GetEncoding("UTF-8").GetBytes(postData.ToString());try{HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.ContentType = "application/x-www-form-urlencoded";request.Referer = url;request.Accept = "*/*";request.Timeout = 30 * 1000;erAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";request.Method = "POST";request.ContentLength = byteData.Length;Stream stream = request.GetRequestStream();stream.Write(byteData, 0, byteData.Length);stream.Flush();stream.Close();HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream backStream = response.GetResponseStream();StreamReader sr = new StreamReader(backStream, Encoding.GetEncoding("UTF-8"));result = sr.ReadToEnd();sr.Close();backStream.Close();response.Close();request.Abort();}catch (Exception ex){result = ex.Message;}return result;}///<summary>///电商Sign签名///</summary>///<param name="content">内容</param>///<param name="keyValue">Appkey</param>///<param name="charset">URL编码</param>///<returns>DataSign签名</returns>private string encrypt(String content, String keyValue, String charset){if (keyValue != null){return base64(MD5(content + keyValue, charset), charset);}return base64(MD5(content, charset), charset);}///<summary>/// 字符串MD5加密///</summary>///<param name="str">要加密的字符串</param>///<param name="charset">编码方式</param>///<returns>密文</returns>private string MD5(string str, string charset){byte[] buffer = System.Text.Encoding.GetEncoding(charset).GetBytes(str);try{System.Security.Cryptography.MD5CryptoServiceProvider check;check = new System.Security.Cryptography.MD5CryptoServiceProvider();byte[] somme = puteHash(buffer);string ret = "";foreach (byte a in somme){if (a < 16)ret += "0" + a.ToString("X");elseret += a.ToString("X");}return ret.ToLower();}catch{throw;}}/// <summary>/// base64编码/// </summary>/// <param name="str">内容</param>/// <param name="charset">编码方式</param>/// <returns></returns>private string base64(String str, String charset){returnConvert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));}}}。