【问题标题】:Paymill subscription in PHPPHP 中的 Paymill 订阅
【发布时间】:2013-03-17 10:19:27
【问题描述】:

我正在尝试在 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(参见上面的 $transaction['payment']['id'])。

我在这里做错了什么?

【问题讨论】:

    标签: php paymill


    【解决方案1】:

    创建订阅也会创建一个事务,这是正确的。添加一个支付对象(https://www.paymill.com/en-gb/documentation-3/reference/api-reference/#create-new-credit-card-payment-with而不是创建一个新交易并将 id 传递给 Subscription->create()。

    【讨论】:

    • 但是我仍然没有得到非常重要的东西——我们如何获得用于订阅的 Paymill 令牌?我的意思是,客户同意订阅并且他/她立即付款(这本身不是订阅费)。客户希望从那里每月自动延期。那么呢? 1 个月后,你如何获得 Paymill 代币?具体如何?我真的无法理解。你能帮我做一个工作流程吗?编辑:顺便说一句,我唯一能找到的是使用订阅中的第一个支付对象。这行得通吗?
    • @dimitko:您在这里缺少的是每个订阅都有一个优惠。报价就像定义数量和间隔的计划。订阅只是客户、报价和所谓的“支付对象”之间的连接。所以,添加订阅后,按照定义的offer间隔执行。
    • 好吧,我可以阅读 API,但我还是有点搞砸了。同样,如果您不介意提供,逐点工作流程将非常有用。 =)
    • @dimitko:我在这里尽量简短,cmets 中的空间有限:)。如果这还不够,并且您有更具体的问题,请打开一个新主题或联系 support@paymill.com。您可以参考我,以便将票转发给我。 /// 1. 通过Merchant Center 或 API 创建报价,2. 添加客户端,3. 向客户端添加支付对象(信用卡或直接借记卡),4. 通过提交报价创建订阅,然后支付对象。
    • 我也在看这个,v2.1 API 现在允许在没有预先创建计划的情况下创建订阅,因此可以即时创建任意订阅数量。工作流程似乎是(我即将对其进行测试):1)创建支付对象(与交易不同)2)创建客户端(如果客户端是新的)2)使用客户端和支付作为参数进行订阅。
    【解决方案2】:

    好吧,这不是 PHP,但在设置订阅的正确步骤之后,我也有同样的不确定性。最后,这很容易,所以我到目前为止发布我的代码以防万一。

    该应用程序是 MVC .net,我正在使用 PayMill PayButton 来生成支付令牌。这是注册过程中模型的一部分。以下代码调用 PayMill API 的 .net 包装器。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多