So I'm using revenuecat to handle in-app purchases for my Flutter app - right now only hooked up with the iOS. I want to test how it works with a trial (Introductory Offers via App Store Connect).
I'm logging the purchase response I get back from RevenueCat and it looks like
flutter: PurchaserInfo{entitlements: EntitlementInfos{all: {all_plans: EntitlementInfo{identifier: all_plans, isActive: true, willRenew: true, periodType: PeriodType.normal, latestPurchaseDate: 2020-12-09T22:49:06Z, originalPurchaseDate: 2020-12-09T22:48:15Z, expirationDate: 2020-12-09T22:54:06Z, store: Store.appStore, productIdentifier: 2, isSandbox: true, unsubscribeDetectedAt: null, billingIssueDetectedAt: null}}, active: {all_plans: EntitlementInfo{identifier: all_plans, isActive: true, willRenew: true, periodType: PeriodType.normal, latestPurchaseDate: 2020-12-09T22:49:06Z, originalPurchaseDate: 2020-12-09T22:48:15Z, expirationDate: 2020-12-09T22:54:06Z, store: Store.appStore, productIdentifier: 2, isSandbox: true, unsubscribeDetectedAt: null, billingIssueDetectedAt: null}}}, latestExpirationDate: 2020-12-09T22:54:06Z, allExpirationDates: {2: 2020-12-09T22:54:06Z}, allPurchaseDates: {2: 2020-12-09T22:49:06Z}, activeSubscriptions: [2], allPurchasedProductIdentifiers: [2], firstSeen: 2020-11-16T00:03:13Z, originalAppUserId: $RCAnonymousID:c38c01542e7a4a7cb674d76147e71f84, requestDate: 2020-12-09T22:53:43Z, originalApplicationVersion: 1.0, originalPurchaseDate: 2013-08-01T07:00:00Z, managementURL: itms-apps://apps.apple.com/account/subscriptions, nonSubscriptionTransactions: []}
The latest expiration date is 5 minutes from now (which is expected) - when I do go live (not using the sandbox account) would the latestExpirationDate be a month from now (since it's a monthly subscription) or a week from now (the trial end date)? And if not then which field should I be looking at for the trial end date? It's not clear to me with a sandbox account, I'd love it if someone could help me know how I could test the trial stuff with RevenueCat
Thanks
Related
We are using razorpay as a payment gateway for handling the online payments on our website.
The problem is that some of our customers are not able to complete their transactions as when they select a payment mode (net banking or card payment) they are redirected to a blank window (with URL about:blank)
Ideally, they should be redirected to their respective bank accounts login.
For some customers, everything is working fine and they are able to do their transactions so we do not thing the problem is with integration.
User experience for the user:
User selects online payment
A dialog is popped up handled by Razorpay.
User selects a payment mode.
User clicks on the Pay button
User should be redirected to their bank accounts login.
User logs in and does a transaction
From step 2-5 is handled by razorpay.
I tried contacting their support team but they are not able to figure out the reason for the issue along with any solution.
Please share if anyone has experienced a similar issue and what was the solution for it.
I am considering that there might be some issue on the clients browser(some pop-up blocker or something)
Thank you for your help.
var _this$state2 = _this.state,
shipping = _this$state2.shipping,
billing = _this$state2.billing;
var options = {
key: _env.default.rzpKey,
amount: _this.total * 100,
// 2000 paise = INR 20, amount in paisa
// currency: 'USD',
name: _env.default.siteTitle,
description: 'Your Order',
image: '/static/logo-accent.png',
/* Below Hnadler is called when the transaction is successful */
handler: function handler(response) {
/* Create Order is called when the transaction is successful*/
_this.createOrder(response, _this.state.cod);
},
prefill: {
name: billing.firstName || shipping.firstName,
email: billing.email || shipping.email,
contact: billing.phone || shipping.phone
},
theme: {
color: '#000'
}
};
var rzp = new Razorpay(options); // eslint-disable-line
// Razorpay dialog is opened
rzp.open();
I have spent more then 6 hours in integrating paypal in React Native. I am using react-native-paypal-lib library.
Code:
RNPaypal.paymentRequest({
clientId: 'MY ID I KNOW',
environment: RNPaypal.ENVIRONMENT.SANDBOX,
intent: RNPaypal.INTENT.SALE,
price: 60,
currency: 'USD',
description: 'Android testing',
acceptCreditCards: true
}).then(response => {
console.log(response)
}).catch(err => {
console.log(err.message)
})
Response:
{response_type: "payment", response: {…}, client: {…}}
client:
environment: "mock"
paypal_sdk_version: "2.15.3"
platform: "Android"
product_name: "PayPal-Android-SDK"
response:
create_time: "2014-07-18T18:46:55Z"
id: "PAY-18X32451H0459092JKO7KFUI"
intent: "sale"
state: "approved"
response_type: "payment"
I am getting the response too. But, I cannot see the transactions in my sandbox account. Also, I am getting the same response id every time.
An approved v1/payment (or v2/order) does not create a transaction. The customer has merely passed through the PayPal.com portion of the process, to give their approval.
After your app is notified of this approval, by e.g. their return from PayPal.com to your app with the details, you must execute the v1/payment (or capture the v2/order), which will create a PayPal transaction. The transaction will have its own new unique ID, which is what you should store for accounting purposes.
(The ID used during the approval process, PAY-##### with v1/payments, or just 17 characters for v2/orders, is only worth keeping around about ~1 month for debug purposes. It has no business/accounting value.)
I have an Express app that I had successfully tested with tokenisation of payments. As I'm in the UK and will be accepting mainly UK cards, I believe I need to implement 3D Secure handling. I'm really struggling to understand the official documentation - examples are few and far between in my opinion. From the following: https://stripe.com/docs/sources/three-d-secure
I have got Sources working instead of Card payments using tokens. This is step 1. Step 2 requires that I determine if the card supports 3D Secure. I have been doing this client side but am not sure how to handle this subsequently - I have been attempting to send the user for a card payment if 3D Secure is not required. BUT if it is required, do i need to create another Source? And do I do this server or client side? I also cannot get the return_url field to do anything - 3D Secure cards simply fail.
Are there any examples out there that would help me? I am finding the official docs simply tell you roughly what to do with not much in the way of 'how' to do things.
I should add I am using v3 with Elements, NOT Checkout.
Thanks for any help.
edit: the below server-side doesn't seem to do anything:
stripe.sources.create({
amount: 6500,
currency: 'gbp',
type: "three_d_secure",
three_d_secure: {
card: stripeSource,
},
redirect: {
return_url: "http://example.com"
}
})
The documentation states "To allow your customer to verify their identity using 3D Secure, redirect them to the URL provided within theredirect[url] attribute of the Source object."
My source object doesn't contain this field?
edit: This is what I have now. The redirect works, but as soon as I authorize the payment, the card declines:
stripe.customers.create({
email: cust_email,
source: stripeSource
}).then(function(customer){
return stripe.charges.create({
amount: fee,
description: "Client Ref: " + clientref,
currency: "gbp",
customer: customer.id,
metadata: {
'allocation:': allocate
},
receipt_email: cust_email,
source: request.query.source,
})
}
).catch(err => {
console.log(err)
})
stripe.sources.create({
amount: fee,
currency: 'gbp',
type: "three_d_secure",
three_d_secure: {
card: stripeSource,
},
redirect: {
return_url: "http://localhost:8000/charge"
}
}).then(function(test) {
response.redirect(test.redirect.url)
})
I create an event using the POST /4.0/legacyvm3/teams/{team}/events function with the following data:
{
"name": "My Event",
"category": "event",
"type": "Conference",
"industry": "Corporate",
"start_time": "2017-05-10T10:00:00.000Z",
"end_time" : "2017-05-10T11:00:00.000Z",
"spaces": [
{
"name": "My Room"
}
]
}
and get the following response:
{"id":2474582,"user_id":138947,"team_id":"49992","name":"My Event","category":"event","venue_mapper_version":2,"start_time":"2017-05-10T10:00:00.000Z","end_time":"2017-05-10T11:00:00.000Z","uses_metric":false,"public":false,"attendee_management":true,"spaces":[{"id":4696516,"name":"My Room","event_id":2474582,"space_order":0}]}
All good. But when editing the event in my browser using the URL:
https://app.socialtables.com/?event=2474582
I am prompted to select a value for Industry and Type. Also, the start and end times are both appear as 11:00. Why is this?
Start and end times look correct given that our API assumes you're using UTC (I see 6 and 7am EDT) when I open your event. It also was 10 and 11 in the response you posted.
Probably more importantly, you're using our legacy API and are therefore being pushed to our legacy product. There is a 4.0/events endpoint available to use. If you're writing your integration now I strongly recommend using these endpoints: https://developer.socialtables.com/api-console#!/Events/post_4_0_events
I am trying to verify various MFA based accounts Yodlee API by performing following steps:
Successful call to addSiteAccount1
In response, it does return siteAccountId
In response, it also provides site refresh status that REFRESH_TRIGGERED
if resp['siteRefreshInfo']['siteRefreshMode']['refreshMode'] == 'MFA' and
resp['siteRefreshInfo']['isMFAInputRequired'] == True and
resp['siteRefreshInfo']['siteRefreshStatus']['siteRefreshStatus'] ==
'REFRESH_TRIGGERED'
Now, calling getMFAResponseForSite repeatedly together with getSiteRefreshInfo results into initially code 801 and than 508 eventually timeout.
Eventually, I come out of the loop with result isMessageAvailable: True
{u'itemId': 0,
u'retry': False, u'timeOutTime': 99880, u'memSiteAccId': 10144098,
u'errorCode': 0, u'isMessageAvailable': True, u'fieldInfo':
{u'questionAndAnswerValues': [], u'numOfMandatoryQuestions': -1,
u'mfaFieldInfoType': u'SECURITY_QUESTION'}}
The only concern I have is that it provides mfaFieldInfoType, but it doesn't provide the actual question.
Couple questions:
a. How do I retrieve proper MFA question(s) for the site?
b. If user is initially coming into system and would like to link account more than couple second wait for user will kill the experience - so what's the recommended time period to be allowed to get MFA question?
c. Is this due to development vs. production environment difference?
d. I can retrieve account and holdings details for account, however than the account results in NON_REFRESHABLE state.
After calling addSiteAccount1 API, you get siteAccountId for an account.
Pass the siteAccountId to getMFAResponseForSite API and keep polling until you get the MFA form. then pass the MFA form with valid values to putMFARequestForSite API.
Please refer to our API flow- https://developer.yodlee.com/Aggregation_API/Aggregation_Services_Guide/API_Flow/Add_Site_Account
Blockquote
Sample response-
{ "isMessageAvailable": true, "fieldInfo": {
"questionAndAnswerValues": [
{
"question": "What is the name of your state?",
"questionFieldType": "label",
"responseFieldType": "text",
"isRequired": "true",
"sequence": 1,
"metaData": "QUESTION_1"
},
{
"question": "What is the name of your first school",
"questionFieldType": "label",
"responseFieldType": "text",
"isRequired": "true",
"sequence": 2,
"metaData": "QUESTION_2"
}
],
"numOfMandatoryQuestions": 2,
"mfaFieldInfoType": "SECURITY_QUESTION" }, "timeOutTime": 97340, "itemId": 0, "memSiteAccId": 10003775, "retry": false }