-
-
Save Urbiwanus/c1e456f889f53e940a11 to your computer and use it in GitHub Desktop.
app.factory('PaypalService', ['$q', '$ionicPlatform', 'shopSettings', '$filter', '$timeout', function ($q, $ionicPlatform, shopSettings, $filter, $timeout) { | |
var init_defer; | |
/** | |
* Service object | |
* @type object | |
*/ | |
var service = { | |
initPaymentUI: initPaymentUI, | |
createPayment: createPayment, | |
configuration: configuration, | |
onPayPalMobileInit: onPayPalMobileInit, | |
makePayment: makePayment | |
}; | |
/** | |
* @ngdoc method | |
* @name initPaymentUI | |
* @methodOf app.PaypalService | |
* @description | |
* Inits the payapl ui with certain envs. | |
* | |
* | |
* @returns {object} Promise paypal ui init done | |
*/ | |
function initPaymentUI() { | |
init_defer = $q.defer(); | |
$ionicPlatform.ready().then(function () { | |
var clientIDs = { | |
"PayPalEnvironmentProduction": shopSettings.payPalProductionId, | |
"PayPalEnvironmentSandbox": shopSettings.payPalSandboxId | |
}; | |
PayPalMobile.init(clientIDs, onPayPalMobileInit); | |
}); | |
return init_defer.promise; | |
} | |
/** | |
* @ngdoc method | |
* @name createPayment | |
* @methodOf app.PaypalService | |
* @param {string|number} total total sum. Pattern 12.23 | |
* @param {string} name name of the item in paypal | |
* @description | |
* Creates a paypal payment object | |
* | |
* | |
* @returns {object} PayPalPaymentObject | |
*/ | |
function createPayment(total, name) { | |
// "Sale == > immediate payment | |
// "Auth" for payment authorization only, to be captured separately at a later time. | |
// "Order" for taking an order, with authorization and capture to be done separately at a later time. | |
var payment = new PayPalPayment("" + total, "EUR", "" + name, "Sale"); | |
return payment; | |
} | |
/** | |
* @ngdoc method | |
* @name configuration | |
* @methodOf app.PaypalService | |
* @description | |
* Helper to create a paypal configuration object | |
* | |
* | |
* @returns {object} PayPal configuration | |
*/ | |
function configuration() { | |
// for more options see `paypal-mobile-js-helper.js` | |
var config = new PayPalConfiguration({merchantName: shopSettings.payPalShopName, merchantPrivacyPolicyURL: shopSettings.payPalMerchantPrivacyPolicyURL, merchantUserAgreementURL: shopSettings.payPalMerchantUserAgreementURL}); | |
return config; | |
} | |
function onPayPalMobileInit() { | |
$ionicPlatform.ready().then(function () { | |
// must be called | |
// use PayPalEnvironmentNoNetwork mode to get look and feel of the flow | |
PayPalMobile.prepareToRender(shopSettings.payPalEnv, configuration(), function () { | |
$timeout(function () { | |
init_defer.resolve(); | |
}); | |
}); | |
}); | |
} | |
/** | |
* @ngdoc method | |
* @name makePayment | |
* @methodOf app.PaypalService | |
* @param {string|number} total total sum. Pattern 12.23 | |
* @param {string} name name of the item in paypal | |
* @description | |
* Performs a paypal single payment | |
* | |
* | |
* @returns {object} Promise gets resolved on successful payment, rejected on error | |
*/ | |
function makePayment(total, name) { | |
var defer = $q.defer(); | |
total = $filter('number')(total, 2); | |
$ionicPlatform.ready().then(function () { | |
PayPalMobile.renderSinglePaymentUI(createPayment(total, name), function (result) { | |
$timeout(function () { | |
defer.resolve(result); | |
}); | |
}, function (error) { | |
$timeout(function () { | |
defer.reject(error); | |
}); | |
}); | |
}); | |
return defer.promise; | |
} | |
return service; | |
}]); | |
//To use this service | |
PaypalService.initPaymentUI().then(function () { | |
PaypalService.makePayment($scope.total(), "Total").then(...) | |
}); | |
// shop settings | |
// include appConstant into your app.js | |
angular.module('appConstant', []).constant('shopSettings',{ | |
payPalSandboxId : 'sand box id here', | |
payPalProductionId : 'production id here', | |
payPalEnv: 'PayPalEnvironmentSandbox', // for testing production for production | |
payPalShopName : 'MyShopName', | |
payPalMerchantPrivacyPolicyURL : 'url to policy', | |
payPalMerchantUserAgreementURL : ' url to user agreement ' | |
}); |
Nice work. Thank you.
Nice work! Working flawless.
why is it when the total payment is about $1000+ and it is automatically canceling the payment ? any suggestion about this . thanks
Getting issue ReferenceError: PayPalMobile is not defined
I am getting this Error. Please Help me.
ReferenceError: PayPalMobile is not defined
at payPalService.js:35
at processQueue (ionic.bundle.js:29132)
at ionic.bundle.js:29148
at Scope.$eval (ionic.bundle.js:30400)
at Scope.$digest (ionic.bundle.js:30216)
at ChildScope.$apply (ionic.bundle.js:30508)
at HTMLButtonElement. (ionic.bundle.js:65428)
at defaultHandlerWrapper (ionic.bundle.js:16792)
at HTMLButtonElement.eventHandler (ionic.bundle.js:16780)
at triggerMouseEvent (ionic.bundle.js:2953)
I am getting the error that "THE MERCHANT DOES NOT ACCEPT PAYMENT OF THIS TYPE".
Is that any code /application error / paypal merchant account/ country error??
Can any one help me plz
@AhammadAliPK you should just add it like this: <script src="js/paypal-mobile-js-helper.js" type="text/javascript"></script>
, as they state in the docs.
I integrated in my ionic app & successfully getting renderSinglePaymentUI but I am unable to use renderFuturePaymentUI, It goes in error callback saying "Passibly configuration submitted is invalid"
if you are using ionic, i think you need to do "ionic build browser" then ionic run browser for it to work properly