顺丰bsp物流下单php接口测试,golang 调用顺丰API接口测试-Go语言中文社区

0c874617a8d28dda7bab7eabc756bcf6.png

之后就可以按照文档生成xml请求信息

为了方便快速搭建 golang 的结构粘贴如下

type Rquest struct {

XMLName xml.Name `xml:"Request"`

Service string `xml:"service,attr"`

Lang string `xml:"lang,attr"`

Head string `xml:"Head"`

Error string `xml:"ERROR"`

Body Body `xml:"Body"`

}

type Body struct {

SFOrder SFOrder `xml:"Order"`

}

type SFOrder struct {

XMLName xml.Name `xml:"Order"`

OrderId string `xml:"orderid,attr"`

ExpressType string `xml:"express_type,attr"`

JProvince string `xml:"j_province,attr"`

JCity string `xml:"j_city,attr"`

JCounty string `xml:"j_county,attr"`

JCompany string `xml:"j_company,attr"`

JContact string `xml:"j_contact,attr"`

JTel string `xml:"j_tel,attr"`

JAddress string `xml:"j_address,attr"`

DProvince string `xml:"d_province,attr"`

DCity string `xml:"d_city,attr"`

DCounty string `xml:"d_county,attr"`

DCompany string `xml:"d_company,attr"`

DContact string `xml:"d_contact,attr"`

DTel string `xml:"d_tel,attr"`

DAddress string `xml:"d_address,attr"`

ParcelQuantity string `xml:"parcel_quantity,attr"`

CargoTotalWeight string `xml:"cargo_total_weight,attr"`

Custid string `xml:"custid,attr"`

PayMethod string `xml:"pay_method,attr"`

RoutelabelService string `xml:"routelabelService,attr"`

Cargo Cargo

}

type Cargo struct {

XMLName xml.Name `xml:"Cargo"`

Name string `xml:"name,attr"`

}

type Response struct {

XMLName xml.Name `xml:"Response"`

Service string `xml:"service,attr"`

Lang string `xml:"lang,attr"`

Head string `xml:"Head"`

Error string `xml:"ERROR"`

Body RBody `xml:"Body"`

}

type RBody struct {

ResponseBody ResponseBody `xml:"OrderResponse"`

}

type ResponseBody struct {

XMLName xml.Name `xml:"OrderResponse"`

FilterResult string `xml:"filter_result,attr"`

DestCode string `xml:"destcode,attr"`

Mailno string `xml:"mailno,attr"`

Origincode string `xml:"origincode,attr"`

OrderId string `xml:"orderid,attr"`

RlsInfo RlsInfo `xml:"rls_info"`

}

type RlsInfo struct {

RlsErrormsg string `xml:"rls_errormsg,attr"`

InvokeResult string `xml:"invoke_result,attr"`

RlsCode string `xml:"rls_code,attr"`

RlsDetail RlsDetail `xml:"rls_detail"`

}

type RlsDetail struct {

WaybillNo string `xml:"waybillNo,attr"`

SourceTransferCode string `xml:"sourceTransferCode,attr"`

SourceCityCode string `xml:"sourceCityCode,attr"`

SourceDeptCode string `xml:"sourceDeptCode,attr"`

SourceTeamCode string `xml:"sourceTeamCode,attr"`

DestCityCode string `xml:"destCityCode,attr"`

DestDeptCode string `xml:"destDeptCode,attr"`

DestDeptCodeMapping string `xml:"destDeptCodeMapping,attr"`

DestTeamCode string `xml:"destTeamCode,attr"`

DestTransferCode string `xml:"destTransferCode,attr"`

DestRouteLabel string `xml:"destRouteLabel,attr"`

ProName string `xml:"proName,attr"`

CargoTypeCode string `xml:"cargoTypeCode,attr"`

LimitTypeCode string `xml:"limitTypeCode,attr"`

ExpressTypeCode string `xml:"expressTypeCode,attr"`

CodingMapping string `xml:"codingMapping,attr"`

XbFlag string `xml:"xbFlag,attr"`

PrintFlag string `xml:"printFlag,attr"`

TwoDimensionCode string `xml:"twoDimensionCode,attr"`

ProCode string `xml:"proCode,attr"`

PrintIcon string `xml:"printIcon,attr"`

}

将数据结构转换为xml格式化字符串代码如下

xmlorder, _ := xml.Marshal(sfOrder)

str2 := string(xmlorder[:])

根据文档提示将信息加密,注意这边是两层加密方式

// str为xml code 为效验码

func md5V(str string, code string) string {

md5Key := md5.New()

md5Key.Write([]byte(fmt.Sprintf("%s%s", str, code)))

xmlKey := base64.StdEncoding.EncodeToString(md5Key.Sum(nil))

return xmlKey

}

之后调用http post请求传入两个参数分别为 xml 和 verifyCode

代码如下

func HttpPost(xmls string) (err error, res model.Response) {

checkwork := "rIGDqQhU5JbIVQ*******vjcivbg"

urls := "http://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService"

stringMd5 := md5V(xmls, checkwork)

responseData := model.Response{}

resp, err := http.PostForm(urls, url.Values{"xml": {xmls}, "verifyCode": {stringMd5}})

if err != nil {

return err, responseData

}

defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)

err = xml.Unmarshal(body, &responseData)

if err != nil {

return err, responseData

}

return err, responseData

}

主要的突出问题是:xml的转化,xml与chekwork的加密方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值