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);