转到贝宝REST API请求
因此,进出口目前使用的围棋和进出口试图创建Paypal进行支付我一直想这个代码转到贝宝REST API请求
payer := &Payer{"paypal"}
amount := &Amount{"EUR", "12"}
trans := &Transactions{amount, "A super test"}
uris := &Redirect_urls{"http://localhost", "http://localhost"}
p := &Payment{"sale", payer, trans, uris}
response, err := json.Marshal(p)
if err != nil {
log.Println("Error at PaypalPayment - buy controller")
log.Fatal(err)
}
log.Println(string(response))
client := &http.Client{}
buf := bytes.NewBuffer(response)
req, err := http.NewRequest("POST", "https://api.sandbox.paypal.com/v1/payments/payment", buf)
if err != nil {
log.Println("Error at PaypalPayment - buy controller - 2")
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer " + token.Access_token)
resp, err := client.Do(req)
if err != nil {
log.Println("Error at PaypalPayment - buy controller - 3")
log.Fatal(err)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println("Error at PaypalPayment - buy controller - 4")
log.Fatal(err)
}
log.Println(string(body))
我已经得到了访问令牌,问题是即时得到的这个错误响应本体(最后一行)
MALFORMED_REQUEST
使用IM中的请求是此(视的println)
{
"Intent":"sale",
"Payer":{
"Payment_method":"paypal"
},
"Transactions":{
"Amount":{
"Currency":"EUR",
"Total":"12"
},
"Description":"Super test"
},
"Redirect_urls":{
"Return_url":"http://localhost",
"Cancel_url":"http://localhost"
}
}
问题是交易需要是一个数组。我是多么瞎了
Transactions []*Transactions `json:"transactions"`
正如指出的@jcbwlkr你外壳不匹配什么是在文档。如果你的类型没有json标签,你必须添加它们。您必须在Go中保留属性名称大写,因为它将字段标记为正在导出。如果你不熟悉这个,搜索“未导出的对导出的字段golang”
例如,你的Payment
结构定义需要看起来像这样;
type Payment struct {
Amount *Amount `json:"amount"`
Transactions *Transactions `json:"transactions"`
RdUrls *Redirect_urls `json:"redirect_urls"`
}
此外,仅供参考,您可以使用嵌套那些声明付款声明,所以你不必分配到的Amount
,Transactions
和Redirect_urls
本地实例,以做声明。
这就像;
p := &Payment{"sale", payer, &Transactions{amount, "A super test"}, uris}
我试图仍然得到格式不正确的请求 –
@AlvaroCarvajalNakosmai你是否递归地通过所有类型应用它?注意它们的所有属性名称都较低。如果是这种情况,我看不出你的模式和他们的例子中实现的模式之间有什么区别。 – evanmcdonnal
是的所有的结构。不知道还有什么可以做 –
我不知道这是问题,但使用localhost作为重定向url可能是不允许的。大多数服务器都会因为这样的目的而发送请求失败,因为它可能会暴露安全漏洞。你能链接到这个请求的文档吗?为了说出它的好坏,我必须能够将它与API的期望进行比较。此外,来自响应机构的状态代码和任何其他信息通常都会有所帮助。 – evanmcdonnal
https://developer.paypal.com/docs/api/#create-a-payment多数民众赞成在请求应该看起来像 - 至于使用本地主机好问题不存在(我猜),因为它说它的格式不正确 –
paypal文档上的错误MALFORMED_REQUEST表示传入的JSON请求没有映射到API请求 –