Алиссон Александр помог понять, как сгенерировать String checkout_preference_id
.
Ниже вы увидите минимальный код, необходимый для получения платежа через MercadoPago.
Во-первых, вы должны добавить зависимости в build.gradle (Модуль: приложение)
// Dealing with HTTP internet connection
implementation 'com.android.volley:volley:1.1.1'
//Dealing with MercadoPago SDK and dependencies
implementation 'com.mercadopago.android.px:checkout:4.0.+'
Некоторые люди рекомендуют добавить разрешение Интернета в Манифест
<uses-permission android:name="android.permission.INTERNET" />
Далее вам необходимо создать JSONObject, и для этого есть разные способы.
Таким образом:
StringBuilder strjsonobj = new StringBuilder();
String strJson = "{\n" +
" \"items\": [\n" +
" {\n" +
" \"title\": \"Item\",\n" +
" \"description\": \"Multicolor Item\",\n" +
" \"quantity\": 1,\n" +
" \"currency_id\": \"BRL\",\n" +
" \"unit_price\": 35.0\n" +
" }\n" +
" ],\n" +
" \"payer\": {\n" +
"\t\t \"name\": \"Núbia\",\n" +
"\t\t \"surname\": \"Macedo\",\n" +
"\t\t \"email\": \"leann@gmail.com\",\n" +
"\t\t \"date_created\": \"2015-06-02T12:58:41.425-04:00\",\n" +
"\t\t \"phone\": {\n" +
"\t\t \"area_code\": \"\",\n" +
"\t\t \"number\": \"880.402.7555\"\n" +
"\t\t },\n" +
"\t\t \"identification\": {\n" +
"\t\t \"type\": \"DNI\",\n" +
"\t\t \"number\": \"123456789\"\n" +
"\t\t },\n" +
"\t\t \"address\": {\n" +
"\t\t \"street_name\": \"Núbia Viela\",\n" +
"\t\t \"street_number\": 25598,\n" +
"\t\t \"zip_code\": \"8972\"\n" +
"\t\t }\n" +
"\t\t }\n" +
" }";
strjsonobj.append(strJson);
JSONObject jsonObject = new JSONObject();
try {
jsonObject = new JSONObject(strjsonobj.toString());
Log.i("debinf MainAct", "object is : "+jsonObject);
} catch (JSONException e) {
e.printStackTrace();
}
Илитаким образом:
JSONObject jsonObject = new JSONObject();
final JSONObject itemJSON = new JSONObject();
final JSONObject payerJSON = new JSONObject();
JSONArray itemJsonArray = new JSONArray();
try {
itemJSON.put("title", "Dummy Item");
itemJSON.put("description", "Multicolor Item");
itemJSON.put("quantity", 1);
itemJSON.put("currency_id", "BRL");
itemJSON.put("unit_price", 2.10);
itemJsonArray.put(itemJSON);
JSONObject phoneJSON = new JSONObject();
phoneJSON.put("area_code", "");
phoneJSON.put("number", "880.402.7555");
JSONObject idJSON = new JSONObject();
idJSON.put("type", "DNI");
idJSON.put("number", "123456789");
JSONObject addressJSON = new JSONObject();
addressJSON.put("street_name", "Núbia Viela");
addressJSON.put("street_number", 25598);
addressJSON.put("zip_code", "8972");
payerJSON.put("name", "Núbia");
payerJSON.put("surname", "Macedo");
payerJSON.put("email", "leann@gmail.com");
payerJSON.put("date_created", "2015-06-02T12:58:41.425-04:00");
payerJSON.put("phone", phoneJSON);
payerJSON.put("identification", idJSON);
payerJSON.put("address", addressJSON);
jsonObject.put("items", itemJsonArray);
jsonObject.put("payer", payerJSON);
} catch (JSONException e) {
e.printStackTrace();
}
MercadoPago предлагает отправить как можно больше информации о плательщике, чтобы повысить скорость конвертации платежей.Но вы можете отправить как можно меньше, как показано в вопросе.
Кроме того, вы можете персонализировать другие вещи в JSONObject, такие как показано здесь
Теперь давайте создадимпеременная Строка checkout_preference_id
.Для этого я использовал метод volley
.Когда сервер MercadoPago отправляет обратно нашу переменную, мы автоматически начнем платеж.
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
final String url = "https://api.mercadopago.com/checkout/preferences?access_token="+ACCESS_TOKEN_SANDBOX;
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, jsonObject, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Log.i("debinf MainAct", "response JSONObject: "+response);
String checkoutPreferenceId = response.getString("id");
new MercadoPagoCheckout.Builder(PUBLIC_KEY_SANDBOX, checkoutPreferenceId).build().startPayment(MainActivity.this,REQUEST_CODE);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("debinf MainAct", "response ERROR: "+error.networkResponse.allHeaders);
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
return headers;
}
};
requestQueue.add(jsonObjectRequest);
Используйте REQUEST_CODE
, отправленный startPayment , чтобы получить результат проверки в onActivityResult .
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
if (requestCode == REQUEST_CODE) {
if (resultCode == MercadoPagoCheckout.PAYMENT_RESULT_CODE) {
final Payment payment = (Payment) data.getSerializableExtra(MercadoPagoCheckout.EXTRA_PAYMENT_RESULT);
((TextView) findViewById(R.id.mp_results)).setText("Resultado del pago: " + payment.getStatus());
//Done!
} else if (resultCode == RESULT_CANCELED) {
if (data != null && data.getExtras() != null
&& data.getExtras().containsKey(MercadoPagoCheckout.EXTRA_ERROR)) {
final MercadoPagoError mercadoPagoError =
(MercadoPagoError) data.getSerializableExtra(MercadoPagoCheckout.EXTRA_ERROR);
((TextView) findViewById(R.id.mp_results)).setText("Error: " + mercadoPagoError.getMessage());
//Resolve error in checkout
} else {
//Resolve canceled checkout
}
}
}
}
Вот и все!Пожалуйста, будьте свободны, чтобы улучшить код выше.В основном по вопросам безопасности.