Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not getting token #6

Closed
hsmith825 opened this issue Jun 2, 2016 · 3 comments
Closed

Not getting token #6

hsmith825 opened this issue Jun 2, 2016 · 3 comments

Comments

@hsmith825
Copy link

Hi Sam,

When I authorize the payment in Apple Pay, I get an object that does not include the token. I don't get anytime of error. I tried to using both transactionIdentifier and paymentData as tokens. Stripe rejected both. When I install as you the plugin I get version 2.1.2. I noticed you have released 2.1.4, I tried to install the latest version without luck. I wanted to try your latest version. Could that be the problem? The object is as follows:

{"transactionIdentifier":"74B674B2394728E699B07D27E168C77502A69ED4D6342988985C5515F852E3B9","paymentData":"eyJ2ZXJzaW9uIjoiRUNfdjEiLCJkYXRhIjoiV2FRbE10RktsbGcybEhQaG5qVkpzRnU5bFp1b1JVc3Zub0t4ajdKQ0lxVjYyM3ZXMys0V3MxNlZUZW12YVRNYjV5UCtpdjhhTmwzaFMvdjNtUGhqOSt4d1FmRnVUM2RWeEQzRUpOcmdnM2RubXFiRUw1U0tybFVYTitEVmo0VFBBSkZGdlRtdUUwTDNGRGg4SzFtSytZdE9iOFJ0c0dCWWlyVW9US0t5empMbWg0clNnR1NwQVp1UWJPL0dZVVVTOXdsZGYwWi92ZVpOY05KMzNIMWNoYkVIU0c4VGt5U3pTQjBXdlhjZHlFVko2M0p0YUxDbS9yQjFEdnN2TGxRTDV2RDBFYyt5Qkh0MXd6cVlsUkhmUjZrSWxXbUNRbDVjOVlFUTJYTytzV0dkOHdlSzlUZU9YYW1idjBTM1dMZWg0N3VYMklIQWRGK0doYmhqZnIzMjl4M2VPSmthaUx0S3EwdWhXY1doUUFOMnZBUW1IZFZhLzYvT1lWL0dNM1RCRXhpREVmS3NDdmFHTWttQVI4MlF3eXFFdmtOSFUxNVNFbkY1OFVwTlZ3PT0iLCJzaWduYXR1cmUiOiJNSUFHQ1NxR1NJYjNEUUVIQXFDQU1JQUNBUUV4RHpBTkJnbGdoa2dCWlFNRUFnRUZBRENBQmdrcWhraUc5dzBCQndFQUFLQ0FNSUlENGpDQ0E0aWdBd0lCQWdJSUpFUHlxQWFkOVhjd0NnWUlLb1pJemowRUF3SXdlakV1TUN3R0ExVUVBd3dsUVhCd2JHVWdRWEJ3YkdsallYUnBiMjRnU1c1MFpXZHlZWFJwYjI0Z1EwRWdMU0JITXpFbU1DUUdBMVVFQ3d3ZFFYQndiR1VnUTJWeWRHbG1hV05oZEdsdmJpQkJkWFJvYjNKcGRIa3hFekFSQmdOVkJBb01Da0Z3Y0d4bElFbHVZeTR4Q3pBSkJnTlZCQVlUQWxWVE1CNFhEVEUwTURreU5USXlNRFl4TVZvWERURTVNRGt5TkRJeU1EWXhNVm93WHpFbE1DTUdBMVVFQXd3Y1pXTmpMWE50Y0MxaWNtOXJaWEl0YzJsbmJsOVZRelF0VUZKUFJERVVNQklHQTFVRUN3d0xhVTlUSUZONWMzUmxiWE14RXpBUkJnTlZCQW9NQ2tGd2NHeGxJRWx1WXk0eEN6QUpCZ05WQkFZVEFsVlRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV3aFYzN2V2V3g3SWhqMmpkY0pDaElZM0hzTDF2TENnOWhHQ1YyVXIwcFVFYmcwSU8yQkh6UUg2RE14OGNWTVAzNnpJZzFyclYxTy8wa29tSlBud1BFNk9DQWhFd2dnSU5NRVVHQ0NzR0FRVUZCd0VCQkRrd056QTFCZ2dyQmdFRkJRY3dBWVlwYUhSMGNEb3ZMMjlqYzNBdVlYQndiR1V1WTI5dEwyOWpjM0F3TkMxaGNIQnNaV0ZwWTJFek1ERXdIUVlEVlIwT0JCWUVGSlJYMjIvVmRJR0dpWWwyTDM1WGhRZm5tMWdrTUF3R0ExVWRFd0VCL3dRQ01BQXdId1lEVlIwakJCZ3dGb0FVSS9KSnhFK1Q1TzhuNXNUMktHdy9vcnY5TGtzd2dnRWRCZ05WSFNBRWdnRVVNSUlCRURDQ0FRd0dDU3FHU0liM1kyUUZBVENCL2pDQnd3WUlLd1lCQlFVSEFnSXdnYllNZ2JOU1pXeHBZVzVqWlNCdmJpQjBhR2x6SUdObGNuUnBabWxqWVhSbElHSjVJR0Z1ZVNCd1lYSjBlU0JoYzNOMWJXVnpJR0ZqWTJWd2RHRnVZMlVnYjJZZ2RHaGxJSFJvWlc0Z1lYQndiR2xqWVdKc1pTQnpkR0Z1WkdGeVpDQjBaWEp0Y3lCaGJtUWdZMjl1WkdsMGFXOXVjeUJ2WmlCMWMyVXNJR05sY25ScFptbGpZWFJsSUhCdmJHbGplU0JoYm1RZ1kyVnlkR2xtYVdOaGRHbHZiaUJ3Y21GamRHbGpaU0J6ZEdGMFpXMWxiblJ6TGpBMkJnZ3JCZ0VGQlFjQ0FSWXFhSFIwY0RvdkwzZDNkeTVoY0hCc1pTNWpiMjB2WTJWeWRHbG1hV05oZEdWaGRYUm9iM0pwZEhrdk1EUUdBMVVkSHdRdE1Dc3dLYUFub0NXR0kyaDBkSEE2THk5amNtd3VZWEJ3YkdVdVkyOXRMMkZ3Y0d4bFlXbGpZVE11WTNKc01BNEdBMVVkRHdFQi93UUVBd0lIZ0RBUEJna3Foa2lHOTJOa0JoMEVBZ1VBTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUhLS253K1NveXE1bVhRcjFWNjJjMEJYS3BhSG9kWXU5VFdYRVBVV1BwYnBBaUVBa1RlY2ZXNitXNWwwcjBBRGZ6VENQcTJZdGJTMzl3MDFYSWF5cUJOeThiRXdnZ0x1TUlJQ2RhQURBZ0VDQWdoSmJTKy9PcGphbHpBS0JnZ3Foa2pPUFFRREFqQm5NUnN3R1FZRFZRUUREQkpCY0hCc1pTQlNiMjkwSUVOQklDMGdSek14SmpBa0JnTlZCQXNNSFVGd2NHeGxJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNU1STXdFUVlEVlFRS0RBcEJjSEJzWlNCSmJtTXVNUXN3Q1FZRFZRUUdFd0pWVXpBZUZ3MHhOREExTURZeU16UTJNekJhRncweU9UQTFNRFl5TXpRMk16QmFNSG94TGpBc0JnTlZCQU1NSlVGd2NHeGxJRUZ3Y0d4cFkyRjBhVzl1SUVsdWRHVm5jbUYwYVc5dUlFTkJJQzBnUnpNeEpqQWtCZ05WQkFzTUhVRndjR3hsSUVObGNuUnBabWxqWVhScGIyNGdRWFYwYUc5eWFYUjVNUk13RVFZRFZRUUtEQXBCY0hCc1pTQkpibU11TVFzd0NRWURWUVFHRXdKVlV6QlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJQQVhFWVFaMTJTRjFScGVKWUVIZHVpQW91L2VlNjVONEkzOFM1UGhNMWJWWmxzMXJpTFFsM1lOSWs1N3VnajlkaGZPaU10MnUyWnd2c2pvS1lUL1ZFV2pnZmN3Z2ZRd1JnWUlLd1lCQlFVSEFRRUVPakE0TURZR0NDc0dBUVVGQnpBQmhpcG9kSFJ3T2k4dmIyTnpjQzVoY0hCc1pTNWpiMjB2YjJOemNEQTBMV0Z3Y0d4bGNtOXZkR05oWnpNd0hRWURWUjBPQkJZRUZDUHlTY1JQaytUdkorYkU5aWhzUDZLNy9TNUxNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdId1lEVlIwakJCZ3dGb0FVdTdEZW9WZ3ppSnFraXBuZXZyM3JyOXJMSktzd053WURWUjBmQkRBd0xqQXNvQ3FnS0lZbWFIUjBjRG92TDJOeWJDNWhjSEJzWlM1amIyMHZZWEJ3YkdWeWIyOTBZMkZuTXk1amNtd3dEZ1lEVlIwUEFRSC9CQVFEQWdFR01CQUdDaXFHU0liM1kyUUdBZzRFQWdVQU1Bb0dDQ3FHU000OUJBTUNBMmNBTUdRQ01EclBjb05SRnBteGh2czF3MWJLWXIvMEYrM1pEM1ZOb282KzhaeUJYa0szaWZpWTk1dFpuNWpWUVEyUG5lbkMvZ0l3TWkzVlJDR3dvd1YzYkYzek9EdVFaLzBYZkN3aGJaWlB4bkpwZ2hKdlZQaDZmUnVaeTVzSmlTRmhCcGtQQ1pJZEFBQXhnZ0ZnTUlJQlhBSUJBVENCaGpCNk1TNHdMQVlEVlFRRERDVkJjSEJzWlNCQmNIQnNhV05oZEdsdmJpQkpiblJsWjNKaGRHbHZiaUJEUVNBdElFY3pNU1l3SkFZRFZRUUxEQjFCY0hCc1pTQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRFVE1CRUdBMVVFQ2d3S1FYQndiR1VnU1c1akxqRUxNQWtHQTFVRUJoTUNWVk1DQ0NSRDhxZ0duZlYzTUEwR0NXQ0dTQUZsQXdRQ0FRVUFvR2t3R0FZSktvWklodmNOQVFrRE1Rc0dDU3FHU0liM0RRRUhBVEFjQmdrcWhraUc5dzBCQ1FVeER4Y05NVFl3TmpBeU1URXdNek15V2pBdkJna3Foa2lHOXcwQkNRUXhJZ1FnUlZrY1BUMUJvS2VLc1lmY2xrRk5SY3dOSHp4Vng5OE1QKzdrVnNaOVI4VXdDZ1lJS29aSXpqMEVBd0lFU0RCR0FpRUF2V2V3MWdRMUZobHRkR0xhM1BhejVxaHNicW1jU2NtY05Yb3ZnVWI5azhRQ0lRQ1dxQklyZVZGRjFTZ1VZc2VwMkpxYlNtVEFtTWVQb0tsM2V2WUlpcDBkOXdBQUFBQUFBQT09IiwiaGVhZGVyIjp7ImVwaGVtZXJhbFB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTh6UGJPTU9uUUdMQ2FKYjQvbzcyZ094UnZsMWFtN0ViV0ZWRnpGaHpGTmRja3hkNUpJcW4xY2ZQbDZDejZGKzFpWlkxd1ZVWkc2aWVMTXptM0hpU1lnPT0iLCJwdWJsaWNLZXlIYXNoIjoiK0tSbllxRGhPcXRMOU9XMm1YSGNRanRDMFhES2hUbmVPWmZjVWlqZmxpaz0iLCJ0cmFuc2FjdGlvbklkIjoiNzRiNjc0YjIzOTQ3MjhlNjk5YjA3ZDI3ZTE2OGM3NzUwMmE2OWVkNGQ2MzQyOTg4OTg1YzU1MTVmODUyZTNiOSJ9fQ=="}.

Any help is appreciated!!!

Thanks!!!

@samkelleher
Copy link
Owner

Hi @hsmith825 -
Making progress I see, the paymentData is the token. It comes out of the device base64 encoded, so if I decode your value I get the full JSON token:

{
    "version": "EC_v1",
    "data": "WaQlMtFKllg2lHPhnjVJsFu9lZuoRUsvnoKxj7JCIqV623vW3+4Ws16VTemvaTMb5yP+iv8aNl3hS/v3mPhj9+xwQfFuT3dVxD3EJNrgg3dnmqbEL5SKrlUXN+DVj4TPAJFFvTmuE0L3FDh8K1mK+YtOb8RtsGBYirUoTKKyzjLmh4rSgGSpAZuQbO/GYUUS9wldf0Z/veZNcNJ33H1chbEHSG8TkySzSB0WvXcdyEVJ63JtaLCm/rB1DvsvLlQL5vD0Ec+yBHt1wzqYlRHfR6kIlWmCQl5c9YEQ2XO+sWGd8weK9TeOXambv0S3WLeh47uX2IHAdF+Ghbhjfr329x3eOJkaiLtKq0uhWcWhQAN2vAQmHdVa/6/OYV/GM3TBExiDEfKsCvaGMkmAR82QwyqEvkNHU15SEnF58UpNVw==",
    "signature": "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",
    "header": {
        "ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8zPbOMOnQGLCaJb4/o72gOxRvl1am7EbWFVFzFhzFNdckxd5JIqn1cfPl6Cz6F+1iZY1wVUZG6ieLMzm3HiSYg==",
        "publicKeyHash": "+KRnYqDhOqtL9OW2mXHcQjtC0XDKhTneOZfcUijflik=",
        "transactionId": "74b674b2394728e699b07d27e168c77502a69ed4d6342988985c5515f852e3b9"
    }
}

You basically construct a Stripe token yourself and submit to them, depending on how you're going to handle the process. All this plugin does is expose the data from the payment sheet (such as name, address etc) and the payment token.

It's up to you to handle the token with whatever payment platform you use. If you use their native SDK, you can use something like createTokenWithPayment

In my projects, I actually pass the token to an HTTP API and relay to the payment provider that way. The token is encrypted and signed using the merchant certificate, so its safe to move online.

Hope this helps!

@hsmith825
Copy link
Author

Hi Sam,

According to Stripe. You left the final step out of your plugin. That is the step that converts the Apple Pay token into a Stripe token. All the tools that interface to Stripe provide this step. Below is the code that will do this:
// ViewController.m

  • (void)handlePaymentAuthorizationWithPayment:(PKPayment )payment
    completion:(void (^)(PKPaymentAuthorizationStatus))completion {
    [[STPAPIClient sharedClient] createTokenWithPayment:payment
    completion:^(STPToken *token, NSError *error) {
    if (error) {
    completion(PKPaymentAuthorizationStatusFailure);
    return;
    }
    /

    We'll implement this below in "Sending the token to your server".
    Notice that we're passing the completion block through.
    See the above comment in didAuthorizePayment to learn why.
    */
    [self createBackendChargeWithToken:token completion:completion];
    }];
    }

I don't know how to add this to your plugin. Can you help? We have spend days trying to solve this ourselves.

Your help is appreciated.
Thanks!!!

@amritk
Copy link

amritk commented Jun 2, 2017

@hsmith825 I just found this fork which should work for you too https://github.com/monoku/cordova-plugin-applepay-stripe

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants