Apple Pay Push to Card

Merchants who want to integrate via API calls to Coinflows payout endpoints using Apple Pay push to card can follow this step by step guide.

Implementing via Apple Pay API

  1. Enable Apple Pay on your Coinflow account, which you can do one of two ways:
    If you opt to go through Coinflow’s existing Apple Developer account:

    1. Request a site association file from Coinflow and make it publicly accessible at https\://yourDomain.com\/.well-known/apple-developer-merchantid-domain-association.txt.
    2. Once verified by the Coinflow team that this file is accessible and you have been configured within our Apple Pay developer settings and your Coinflow merchant settings, Apple Pay will be enabled on your account.
      If you opt to use your own Apple Developer Account:
    3. Use this guide to Generate Apple Pay Certificates on your developer account.
    4. Once certificates have been generated, reach out to Coinflow with these certificates so that we can configure your Coinflow account to have access to interact with your Apple Pay merchant account.
  2. You will then need to follow Apple Pay API implementation directly from the Apple Developer documentation, which you can find through this link.

    1. For payouts through Apple Pay, after you have configured the SDK to display your Apple Pay button on your UI, you will specifically want to look through documentation on Apple Pay Disbursement API Requests . Here, Apple provides example source code for this specific request below:

      async function onApplePayButtonClicked() {
      // Consider falling back to Apple Pay JS if Payment Request is not available.
      if (!PaymentRequest) {
      return;
      }
      try {
      // Define PaymentMethodData
      const paymentMethodData = [{
      "supportedMethods": "https://apple.com/apple-pay",
      "data": {
      "version": 3,
      "merchantIdentifier": "merchant.com.apdemo",
      "merchantCapabilities": [
      "supports3DS"
      ],
      "supportedNetworks": [
      "masterCard",
      "visa"
      ],
      "countryCode": "US"
      }
      }];
      // Define PaymentDetails
      const paymentDetails = {
      "total": {
      "label": "Disbursement Demo (Card is not charged)",
      "amount": {
      "value": "12.00",
      "currency": "USD"
      }
      },
      "modifiers": [
      {
      "supportedMethods": "https://apple.com/apple-pay",
      "data": {
      "disbursementRequest": {},
      "additionalLineItems": [
      {
      "label": "Total Amount",
      "amount": "12.00"
      },
      {
      "label": "Apple Pay Demo",
      "amount": "12.00",
      "disbursementLineItemType": "disbursement"
      }
      ]
      }
      }
      ]
      };
      // Define PaymentOptions
      const paymentOptions = {};
      // Create PaymentRequest
      const request = new PaymentRequest(paymentMethodData, paymentDetails, paymentOptions);
      request.onmerchantvalidation = event => {
      // Call your own server to request a new merchant session.
      const merchantSessionPromise = validateMerchant();
      event.complete(merchantSessionPromise);
      };
      request.onpaymentmethodchange = event => {
      if (event.methodDetails.type !== undefined) {
      // Define PaymentDetailsUpdate based on the selected payment method.
      // No updates or errors needed, pass an object with the same total.
      const paymentDetailsUpdate = {
      'total': paymentDetails.total
      };
      event.updateWith(paymentDetailsUpdate);
      }
      };
      const response = await request.show();
      const status = "success";
      await response.complete(status);
      } catch (e) {
      // Handle errors
      }
      }
    2. In the above code, within the snippet of code that actually creates the Payment Request (under the comment “//Create PaymentRequest”), in place of validateMerchant() you will call Coinflow’s Validate Apple Pay Merchant endpoint with your domain name and merchantID.

    3. Additionally, you will need to pass in the quote of the transaction into the Apple Pay SDK under paymentDetails as defined in the code above, with fees included from the Get Quote Coinflow endpoint.

  3. You should receive an Apple Pay token object as a response from this code, which will look something like this:

Payment Token: {
"paymentMethod": {
"network": "Visa",
"displayName": "Visa 4521",
"type": "debit"
},
"transactionIdentifier": "4168ce73b923ee9cc23a0f40068960d17452e81ad2b7b1851e1b15d6051802d5",
"paymentData": {
"data": "VAYt0i+/3NUk4r5yBpOEjHHXNOZF0MrP7c/5U84zeoo96gui/iEUZJA73wXNhx/q0jq1+DhADTFOW4S5TgSWdau9yWye/pY0qx2z2LN119MCVlwZJZO+ifcWAeLDqEOHcjvesgDwqI5/+wQ6/W/MNCks83IqO3rBgofFENb14zAPx80NdUP2VBFkNmX+J76m3TG92PzEnV2HuT9TG+8tGizAXAk2BG5tL9f+2ywYi/f9KC/lE6oEIhrNP3nWzqp3OogFHBEnPdosl18dbfdQd/2+K6tqneY3sQUcI7CocbeH8UDDjt/1tmwuSdbV+PtMlLMm2kZQlJI4jfskmwyrJ+aWQJm0e8ItZVcS6OS8WbH0uDrSofdaaO4AvT5MWtdV45pyhnhR/oEZlAePNld/S8XyRILWg17K0k2rbr/Smi0=",
"signature": "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",
"header": {
"publicKeyHash": "h/mfJj19xShja2t1Wfto4BiaaOuRaF/Fj5tAHHkjZUo=",
"ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzeED3LZhhc9TbnDEC86TUTQAZEJxhgSvsQAuKujK3ozy8iZzzXLiaghPonmMIownslEd8hZS3nz+R/cq2L2x2g==",
"transactionId": "4168ce73b923ee9cc23a0f40068960d17452e81ad2b7b1851e1b15d6051802d5"
},
"version": "EC_v1"
}
}
  1. You will then use this token object, along with the collected billing data to create an Apple Pay disbursement transaction through Coinflow’s Create Transaction endpoint.