React Native library for accepting payments with CloudPayments SDK
Download package:
npm install --save react-native-cloudpaymentsor
yarn add react-native-cloudpaymentsLink dependencies:
react-native link react-native-cloudpaymentsAdd in your Podfile next line:
pod 'SDK-iOS', :git =>"https://github.com/cloudpayments/SDK-iOS", :branch =>"master"
pod 'RNCloudPayments', :path =>'../node_modules/react-native-cloudpayments'Install Pods in ios directory:
cd ios && pod installValidate card.
Returns a Promise that resolve card status (Boolean).
Arguments
cardNumber-StringNumber of payment card.cardExp-StringExpire date of payment card.cardCvv-StringCVV code of payment card.
Examples
importRNCloudPaymentfrom'react-native-cloudpayments';constdemoCard={number: '5105105105105100',extDate: '10/18',cvvCode: '123',};RNCloudPayment.isValidCard(demoCard.number,demoCard.extDate,demoCard.cvvCode).then(cardStatus=>{console.log(cardStatus);// true});Retrive card type.
Returns a Promise that resolve card type (String).
Card types:
- Unknown
- Visa
- MasterCard
- Maestro
- Mir
- JCB
Arguments
cardNumber-StringNumber of payment card.cardExp-StringExpire date of payment card.cardCvv-StringCVV code of payment card.
Examples
importRNCloudPaymentfrom'react-native-cloudpayments';constdemoCard={number: '5105105105105100',extDate: '10/18',cvvCode: '123',};RNCloudPayment.getType(demoCard.number,demoCard.extDate,demoCard.cvvCode).then(cardType=>{console.log(getType);// MasterCard});Create cryptogram. Used in CloudPayment API.
Returns a Promise that resolve cryptogram (String).
Arguments
cardNumber-StringNumber of payment card.cardExp-StringExpire date of payment card.cardCvv-StringCVV code of payment card.publicId-StringYour Public ID, you need to get it in your personal account.
Examples
importRNCloudPaymentfrom'react-native-cloudpayments';constdemoCard={number: '5105105105105100',extDate: '10/18',cvvCode: '123',};constpublicId='pk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx';RNCloudPayment.createCryptogram(demoCard.number,demoCard.extDate,demoCard.cvvCode,publicId).then(cryptogram=>{console.log(cryptogram);// 025105105100/11004bpp9ltxt6c0jpdk8ErH+N33N9jZBm9Gr0jO7SVslLg/RdWYyjG5wiLrzmrUserhfblFVydij4wpjDvHH4kRnOskjnbn1XrPI8X9LMkvlR5Pkc63U5puXtnS0rkswS6JYaSErcKMq4TazimKY4rGobvhhYfg45LWdLlX0602t7ZybbaBTMff6wtta870/244s65GTbCI1zt6odDMckpEuiczwM68m6j0Rn2IuKpK8kR58x7tFFc7fWrrW0RHvLNxQIW9P+SpsySoiA4xaZfC7lXL57O80Ye6JDi6PWAim5dENNxIc81T1kmXnKn94x8h2+XS83yMHHfTUOeDb7J1fLg==});Converts PKPayment object to cryptogram. Used to create a cryptogram on payment via Apple Pay. Example flow.
Returns a Promise that resolve cryptogram (String).
Arguments
payment-PKPaymentPayment response from Apple Pay.
Examples
importRNCloudPaymentfrom'react-native-cloudpayments';constMETHOD_DATA=[{supportedMethods: ['apple-pay'],data: {merchantIdentifier: 'merchant.my.app',
supportedNetworks,
countryCode,
currencyCode,},},];constdetails={id: PAYMENT_ID,displayItems: [{label: title,amount: {
currency,value: amountValue},},],total: {label: MERCHANT_NAME,amount: {currency,value: amountValue},},};// create Apple Pay payment requestconstpaymentRequest=newPaymentRequest(METHOD_DATA,details);paymentRequest.show().then((paymentResponse)=>{constcryptogram=RNCloudPayment.convertPayment(paymentResponse);console.log(cryptogram);// 013515...Db7J1fLg==});Opens dialog window where user should complete 3DS auth.
Returns a Promise that resolves to null.
Arguments
acsUrl-StringAccess URL.transactionId-StringTransaction ID.paReq-StringPA request data.
Examples
importRNCloudPaymentfrom'react-native-cloudpayments';constpaymentResponse=cloudpaymentAPI.make3DSRequest();console.log(paymentResponse);/***{ "Model": { "TransactionId": 504, "PaReq": "eJxVUdtugkAQ/RXDe9mLgo0Z1nhpU9PQasWmPhLYAKksuEChfn13uVR9mGTO7MzZM2dg3qSn0Q+X\nRZIJxyAmNkZcBFmYiMgxDt7zw6MxZ+DFkvP1ngeV5AxcXhR+xEdJ6BhpEZnEYLBdfPAzg56JKSKT\nAhqgGpFB7IuSgR+cl5s3NqFTG2NAPYSUy82aETqeWPYUUAdB+ClnwSmrwtz/TbkoC0BtDYKsEqX8\nZfZkDGgAUMkTi8synyFU17V5N2nKCpBuAHRVs610VijCJgmZu17UXTxhFWP34l7evYPlegsHkO6A\n0C85o5hMsI3piNIZHc+IBaitg59qJYzgdrUOQK7/WNy+3FZAeSqV5cMqAwLe5JlQwpny8T8HdFW8\netFuBqUyahV+Hjf27vWCaSx22fe+KY6kXKZfJLK1x22TZkyUS8QiHaUGgDQN6s+H+tOq7O7kf8hd\nt30=", "AcsUrl": "https://test.paymentgate.ru/acs/auth/start.do" }, "Success": false, "Message": null}*/RNCloudPayment.show3DSForm(paymentResponse.Model.AcsUrl,paymentResponse.Model.TransactionId,paymentResponse.Model.PaReq);Add Cloudpayments SDK to android/app/build.gradle:
implementation files('../../node_modules/react-native-cloudpayments/android/src/main/libs/cloudpayments-sdk-1.0.5.aar')
Implement ThreeDSDialogListener in MainActivity. Example:
import ru.cloudpayments.sdk.three_ds.ThreeDSDialogListener;
...
public class MainActivity extends NavigationActivity implements ThreeDSDialogListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
SplashScreen.show(this);
super.onCreate(savedInstanceState);
}
@Override
public void onAuthorizationCompleted(String md, String paRes) {
// on successfull 3DS payment
WritableMap params = Arguments.createMap();
params.putString("status", "success");
params.putString("md", md); // transaction id
params.putString("paRes", paRes);
sendEvent(((MainApplication)getApplication()).getReactNativeHost().getReactInstanceManager().getCurrentReactContext(), "Cloudpayments3DSResult", params);
}
@Override
public void onAuthorizationFailed(String html) {
// on failed 3DS payment
WritableMap params = Arguments.createMap();
params.putString("status", "failed");
params.putString("html", html);
sendEvent(((MainApplication)getApplication()).getReactNativeHost().getReactInstanceManager().getCurrentReactContext(), "Cloudpayments3DSResult", params);
}
private void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
}
Listen for Cloudpayments3DSResult event in React Native. Example:
import {DeviceEventEmitter} from 'react-native';
const nativeEventListener = DeviceEventEmitter.addListener('Cloudpayments3DSResult',
(e)=>{
console.log("caught 3DS result");
console.log(e);
/**
*{
status: "success",
md: "50000789",
paRes: "asd2123...329hjs=="
}
*/
});
Licensed under the MIT License.