PHP curl - получить ответ от API - PullRequest
0 голосов
/ 04 мая 2020

Итак, я в значительной степени новичок, когда дело касается PHP curl / json. Я добился неплохих успехов в интеграции формы оплаты размещенных полей Pinpayments.com в мой новый сайт. (Этот код модуля встроен в Drupal, и это не должно влиять на то, что мне нужно делать.)

Что мне нужно сделать, так это извлечь соответствующее сообщение из ответа от pinpayments, когда платеж прошел успешно или платеж был отказался. В настоящее время платежная форма, которая у меня есть, отправляет платеж, поскольку он отображается на моей панели инструментов pinpayments, но я не могу понять, как отобразить сообщение об ошибке, когда карта отклонена.

Это код, который я в настоящее время это означает, что я могу опубликовать форму:

<?php



namespace Drupal\drupalup_simple_form\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\HtmlCommand;

/**
 * Our simple form class.
 */
class SimpleAjaxForm extends FormBase {



  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'payment_form';
  }


  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {

    $form['#attributes'] = array('id' => array('payment_form'));


    $form['publishkey'] = [
      '#type' => 'textfield',
      '#title' => 'Key',
      '#id' => 'card_token',
      '#value' => 'pk_wkHM76EknXUavjrEYZlvNQ'
    ];

    $form['address_line1'] = [
      '#type' => 'textfield',
      '#title' => 'Address line 1',
      '#id' => 'address_line1'
    ];
      $form['address_line2'] = [
      '#type' => 'textfield',
      '#title' => 'Address line 2',
      '#id' => 'address_line2'
    ];
      $form['address_city'] = [
      '#type' => 'textfield',
      '#title' => 'City',
      '#id' => 'address_city'
    ];
      $form['address_postcode'] = [
      '#type' => 'textfield',
      '#title' => 'Postcode',
      '#id' => 'address_postcode'
    ];
      $form['address_state'] = [
      '#type' => 'textfield',
      '#title' => 'State',
      '#id' => 'address_state'
    ];
      $form['address_country'] = [
      '#type' => 'textfield',
      '#title' => 'Country',
      '#id' => 'address_country'
    ];



    $form['name'] = [
      '#type' => 'markup',
      '#markup' => '<div id="name"><!-- Hosted Fields will populate this with the "name" field --></div>',
    ];
    $form['errors_for_name'] = [
      '#type' => 'markup',
      '#markup' => '<div class="error_message" id="errors_for_name">&nbsp;</div>',
    ];


    $form['number'] = [
      '#type' => 'markup',
      '#markup' => '<div id="number"><!-- Hosted Fields will populate this with the "number" field --></div>',
    ];
    $form['errors_for_number'] = [
      '#type' => 'markup',
      '#markup' => '<div class="error_message" id="errors_for_number">&nbsp;</div>',
    ];


    $form['cvc'] = [
      '#type' => 'markup',
      '#markup' => '<div id="cvc"><!-- Hosted Fields will populate this with the "cvc" field --></div>',
    ];
    $form['errors_for_cvc'] = [
      '#type' => 'markup',
      '#markup' => '<div class="error_message" id="errors_for_cvc">&nbsp;</div',
    ];


    $form['expiry'] = [
      '#type' => 'markup',
      '#markup' => '<div id="expiry"><!-- Hosted Fields will populate this with the "expiry" field --></div>',
    ];  
    $form['errors_for_expiry'] = [
      '#type' => 'markup',
      '#markup' => '<div class="error_message" id="errors_for_expiry">&nbsp;</div>',
    ];  

    $form['actions'] = [
      '#type' => 'button',
      '#value' => 'Submit'
    ];

    return $form;
  }



  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
  }

}

$ch = curl_init();


curl_setopt($ch, CURLOPT_URL, 'https://test-api.pinpayments.com/1/charges');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "amount=500&currency=AUD&description=test charge&email=roland@pinpayments.com&ip_address=203.192.1.172&card[number]=4100000000000001&card[expiry_month]=05&card[expiry_year]=2021&card[cvc]=123&card[name]=TIGER WOODS&card[address_line1]=$_POST[address_line1]&card[address_line2]=&card[address_city]=$_POST[address_city]&card[address_postcode]=$_POST[address_postcode]&card[address_state]= $_POST[address_state]&card[address_country]=$_POST[address_country]&metadata[OrderNumber]=123456&metadata[CustomerName]=Roland Robot");



curl_setopt($ch, CURLOPT_USERPWD, 'REMOVED MY SECRET KEY' . ':' . '');

$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}

curl_close($ch);

Как мне сделать «ПОЛУЧИТЬ», чтобы в случае отклонения платежа я мог каким-то образом показать это пользователю?

{
  "error": "card_declined",
  "error_description": "The card was declined",
  "charge_token": "ch_lfUYEBK14zotCTykezJkfg"
}

https://pinpayments.com/developers/api-reference/charges

1 Ответ

0 голосов
/ 05 мая 2020
$token = "xyz";

$error = array(
    "error" => "card_declined",
    "error_description" => "The card was declined",
    "charge_token"=> $token
    );

echo(json_encode($error,true));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...