Paymill подписка на PHP

Я пытаюсь создать подписку в Paymill. Я прочитал их примеры, но я, кажется, не понимаю.

Все, что я действительно хочу сделать, это настроить подписку, вот мой текущий код:

$token = $_POST['paymillToken'];

if ($token) {
    require "Services/Paymill/Payments.php";
    require "Services/Paymill/Transactions.php";
    require "Services/Paymill/Subscriptions.php";
    require "Services/Paymill/Offers.php";


  $params = array(
    'amount'      => '49900',  // Cent!
    'currency'    => 'SEK',   // ISO 4217
    'token'       => $token,
    'description' => 'User ID# ' . $userIdMain . ' Email: ' . $userEmail
  );

$transactionsObject = new Services_Paymill_Transactions(
    PAYMILL_API_KEY, PAYMILL_API_HOST
);
$transaction        = $transactionsObject->create($params);

echo "<br /><br />";    
print_r($transaction);

echo $transaction['client']['id'];
echo $transaction['payment']['id'];


$params = array(
    'client'   => $transaction['client']['id'],
    'offer'    => 'offer_9cdffb501f565bf827a8',
    'payment'  => $transaction['payment']['id']
);
$subscriptionsObject = new Services_Paymill_Subscriptions(PAYMILL_API_KEY, PAYMILL_API_HOST);
$subscription        = $subscriptionsObject->create($params);

echo "<br /><br />";    
print_r($subscription);

} 

Проблема заключается в том, что вышеизложенное создает сразу два платежа. Но кажется, что объект подписки требует, чтобы я сначала указал payment_id (см. Выше "$action['payment"]['id']).

Что я здесь не так делаю?

2 ответа

Создание подписки также создаст транзакцию, и это правильно. Добавьте объект платежа ( https://www.paymill.com/en-gb/documentation-3/reference/api-reference/) вместо создания новой транзакции и передачи идентификатор подписки-> создать ().

Хорошо, это не PHP, но у меня была такая же неопределенность после правильных шагов по настройке подписки. В конце концов, это довольно просто, поэтому я пока выкладываю свой код на случай, если это поможет.

Приложение MVC .net, и я использую PayMill PayButton для генерации токена оплаты. Это часть модели во время процесса регистрации. Следующий код вызывает.net-оболочку API PayMill.

   private static async Task<Subscription> MakePayMillSubscription(int amount, ApplicationUser user, PaymillContext paymillContext, Payment payment, Client client)
    {

        SubscriptionService subscriptionService = paymillContext.SubscriptionService;
        Subscription subscription = await subscriptionService.CreateAsync( payment, client, null, amount, "EUR", Interval.periodWithChargeDay(1, Interval.TypeUnit.MONTH), null, user.Id, Interval.period(10, Interval.TypeUnit.YEAR));
        return subscription;
    }

    private static async Task<Client> MakePayMillClient(RegisterViewModel model, ApplicationUser user, PaymillContext paymillContext)
    {

        ClientService clientService = paymillContext.ClientService;
        Client client = await clientService.CreateWithEmailAndDescriptionAsync(
            model.Email,
            user.Id
        );
        return client;
    }

    private static async Task<Payment> MakePayMillPayment(RegisterViewModel model,PaymillContext context, Client client)
    {

        Payment payment = await context.PaymentService.CreateWithTokenAndClientAsync(model.paymillToken, client);

        return payment;
    }

Затем я вызываю их во время регистрации, как сейчас (я все еще на стадии тестирования)

  client = await MakePayMillClient(model, user, paymillContext);
   payment = await MakePayMillPayment(model, paymillContext,client);
   subscription = await MakePayMillSubscription((int)(account.TotalAmountDue * 100.0M), user, paymillContext, payment, client);
Другие вопросы по тегам