大家好,我又回来了,在我的上一篇文章中,我试图使用SOAP api(将Dwolla与PHP及其api集成),但我发现SOAP api已被弃用,显然Dwolla有更有效的方式,如REST/oAuth2.0,这就是为什么我今天在这里询问如何使用REST api,因为它已经快2周了,我真的很想学习这个。
首先,我要说我已经成功地获得了一个access_token,这样做没有问题。问题是,当我尝试使用一个发送端点(https://www.dwolla.com/developers/endpoints/accountapi/send)基本上试图发送资金到和帐户。我真正的问题是,我永远无法得到一个成功的回应;只有错误或错误消息响应。
所以在索引页我有"Add funds to your account"链接。用户将点击该链接,然后进入Dwolla页面,该页面将接受他们登录Dwolla帐户,然后接受网站要求的权限。在用户按下"Accept"之后,它将重定向到我选择的所选URL,并返回一个access_token以用于授权目的。这是我的代码(这是Dwolla重定向的页面,并发送access_token太)
<?php
//Define variables
$key = 'redacted';
$secret = 'redacted';
$dwolla_client_id = urlencode($key);
$dwolla_secret_key = urlencode($secret);
$code = urlencode($_GET["code"]);
//get token
$retireve_token = file_get_contents("https://www.dwolla.com/oauth/v2/token?client_id=".$dwolla_client_id."&client_secret=".$dwolla_secret_key."&grant_type=authorization_code&redirect_uri=http://localhost/purchase_order.php&code=".$code);
$decoded_json = json_decode($retireve_token, true);
var_dump($decoded_json);
if($decoded_json["access_token"]){
$arr = '{
"oauth_token": "'.$decoded_json["access_token"].'",
"fundsSource": "balance",
"pin": "1111",
"notes": "Payment for services rendered",
"amount": 1.01,
"destinationId": "812-111-1111",
"assumeCosts": false,
"facilitatorAmount": 0,
"destinationType": "dwolla"
}';
$opts = array('http'=>array('method'=>"POST",'content'=> $arr, 'header' => 'Content-Type: application/json'));
$ctx = stream_context_create($opts);
$send_request = file_get_contents('https://www.dwolla.com/oauth/rest/accountapi/send', false, $ctx);
var_dump(json_decode($send_request));
}
?>
我收到这样的消息,例如
array(1) {["access_token"]=> string(50)"redacted"}警告:file_get_contents (https://www.dwolla.com/oauth/rest/accountapi/send):打开流失败:HTTP请求失败!HTTP/1.1 503服务/home/swiftbitcoins/purchase_order.php第47行不可用NULL
你试图做的是一个get请求,而Dwolla文档将其称为post请求。
你可以做的更好的是使用他们的php库内置的方法来调用。这是一个用于restful调用的标准库,比上面代码片段中编写的方式要好得多。
https://github.com/Dwolla/dwolla-php