我在我的项目中使用paypal
SDK,我可以通过我的应用付款,但我付款后无法获得access token
,
这是我的onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_PAYMENT) {
if (resultCode == Activity.RESULT_OK) {
PaymentConfirmation confirm =
data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);
if (confirm != null) {
try {
Log.i(TAG, confirm.toJSONObject().toString(4));
Log.i(TAG, confirm.getPayment().toJSONObject().toString(4));
/**
* TODO: send 'confirm' (and possibly confirm.getPayment() to your server for verification
* or consent completion.
* See https://developer.paypal.com/webapps/developer/docs/integration/mobile/verify-mobile-payment/
* for more details.
*
* For sample mobile backend interactions, see
* https://github.com/paypal/rest-api-sdk-python/tree/master/samples/mobile_backend
*/
displayResultText("PaymentConfirmation info received from PayPal");
new DownloadLink().execute();
} catch (JSONException e) {
Log.e(TAG, "an extremely unlikely failure occurred: ", e);
}
}
这就是我试图获取访问令牌的方式
class DownloadLink extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://api.sandbox.paypal.com/v1/oauth2/token");
try {
String text="AUDZWiH7HHihjLqUT3....."+":"+"EDx-t8O2h1.......";
byte[] data = text.getBytes("UTF-8");
String base64 = Base64.encodeToString(data, Base64.NO_WRAP);
httppost.addHeader("content-type", "application/x-www-form-urlencoded");
httppost.addHeader("Authorization", "Basic " + base64);
StringEntity se=new StringEntity("grant_type=client_credentials");
httppost.setEntity(se);
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
String responseContent = EntityUtils.toString(response.getEntity());
Log.d("Response", responseContent );
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
//Do Your stuff here..
return null;
}
}
我也和volly以及CURL一起使用
public void getaccesstokens()
{
String clientID="AUDZWiH7H.........";
String clientSecret="EDx-t8O2h1.....";
String text=clientID+":"+clientSecret;
byte[] data = new byte[0];
try {
data = text.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
final String base64 = Base64.encodeToString(data, Base64.NO_WRAP);
StringRequest postRequest=new StringRequest(Request.Method.POST,"https://api.sandbox.paypal.com/v1/oauth2/token",new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("accessToken:", response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.d("error:",volleyError.toString());
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params=new HashMap<String,String>();
params.put("grant_type","client_credentials");
params.put("Authorization", "Basic "+base64);
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> headers=new HashMap<String,String>();
headers.put("Accept","application/json");
headers.put("Accept-Language","en_US");
headers.put("Content-Type","application/x-www-form-urlencoded");
return headers;
}
};
postRequest.setRetryPolicy(new
DefaultRetryPolicy(60000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Volley.newRequestQueue(Testones.this).add(postRequest);
}
使用Volly它在我的logcat中显示了这个错误
D/error:﹕ com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: Connection closed by peer
答案 0 :(得分:1)
试试这个:
Dictionary<string, string> sdkConfig = new Dictionary<string, string>();
sdkConfig.Add("mode", "sandbox");
string clientid = "<your client id>";
string secretid = "<your secret id>";
string accessToken = new OAuthTokenCredential(clientid, secretid, sdkConfig).GetAccessToken();
答案 1 :(得分:1)
请查看以下链接,了解哪些json回复从paypal SDK中提供了我们...
https://stackoverflow.com/a/37834913/900338
Paypal SDK代码请检查 https://github.com/paypal/PayPal-Android-SDK/blob/master/SampleApp/src/main/java/com/paypal/example/paypalandroidsdkexample/SampleActivity.java
答案 2 :(得分:0)
这个对我有用,问题在于网络连接的安全性,所以我改变了我的wifi,它工作得很好
这就是我收到此错误的原因
NoConnectionError: javax.net.ssl.SSLHandshakeException: Connection closed by peer
<强> CODE 强>
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://api.sandbox.paypal.com/v1/oauth2/token");
try {
String text="CLIENT ID"+":"+"SECRET ID";
byte[] data = text.getBytes("UTF-8");
String base64 = Base64.encodeToString(data, Base64.NO_WRAP);
httppost.addHeader("content-type", "application/x-www-form-urlencoded");
httppost.addHeader("Authorization", "Basic " + base64);
StringEntity se=new StringEntity("grant_type=client_credentials");
httppost.setEntity(se);
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
String responseContent = EntityUtils.toString(response.getEntity());
Log.d("Response", responseContent );
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}