GVKun编程网logo

PayPal JavaScript SDK:获取基本卡信息 onApprove()(paypal获取api密钥)

46

如果您对PayPalJavaScriptSDK:获取基本卡信息onApprove()感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于PayPalJavaScriptSDK:获

如果您对PayPal JavaScript SDK:获取基本卡信息 onApprove()感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于PayPal JavaScript SDK:获取基本卡信息 onApprove()的详细内容,我们还将为您解答paypal获取api密钥的相关问题,并且为您提供关于functional继承模式 摘自javascript:the good parts_javascript技巧、javascript Array.prototype.slice使用说明_javascript技巧、javascript Array.prototype.slice的使用示例_javascript技巧、javascript Array.remove() 数组删除_javascript技巧的有价值信息。

本文目录一览:

PayPal JavaScript SDK:获取基本卡信息 onApprove()(paypal获取api密钥)

PayPal JavaScript SDK:获取基本卡信息 onApprove()(paypal获取api密钥)

如何解决PayPal JavaScript SDK:获取基本卡信息 onApprove()?

在 PayPal JavaScript SDK 中,我们得到 details 对象 onApprove,如下所示:

onApprove: function (data,actions) {
    console.dir(data);
    // This function captures the funds from the transaction.
    return actions.order.capture()
        .then(function (details) {
            console.dir(details);
            // This function shows a transaction success message to your buyer.
            alert(''Transaction completed by '' + details.payer.name.given_name);
        });
}

我们注意到 details 对象不包含有关付款人用于付款的付款方式的任何信息,即 PayPal、借记卡或信用卡,当然,最后也没有提供 4 位卡号

为什么我们需要基本卡信息?

我们需要基本的卡信息来为我们的客户(包括企业客户)生成更有用的收据。如果没有这些信息,我们的客户就没有必要保留收据并用于会计目的,因为他们甚至无法参考他们用于付款的银行卡

基于 PayPal Here docs,我们从 Receipt API 的响应对象中发现了这一点:

"payment_card": {  
      "card_scheme": "CREDIT","card_number": "2677",// This is what we''re looking for
      "authorization_code": "087202","card_soft_description": "PP*PAYDIANTPAY","icc_info": {  
        "pin_present":false,"signature_verified":false,"authorization_response_code": "00","authorization_response_code_label": "APPROVED","icc_application_cryptogram": "606C700D55FB5C0A","icc_application_cryptogram_label": "TC","icc_application_identifier": "A0000000041010","icc_application_PAN_number": "01","terminal_id": "7688","transaction_status_information": "E800","issuer_application_data": "011060700222000014E100000000000000FF","terminal_verification_results": "0000008000"
      }
    }

但是我们如何使用 PayPal 的 JavaScript SDK 获得相同的信息?我也浏览了 PayPal REST API,但似乎没有找到。请指教,谢谢。

解决方法

如果您使用标准的黑色借记卡或信用卡按钮进行集成,您将不会收到有关他们使用的是哪张卡的任何信息。事实上,您甚至不知道他们是否使用卡付款——他们可能已经退回到常规的 PayPal 结账并使用了不同的资金来源。所有帐单信息在 PayPal 中都按设计保密。

如果您的国家/地区和货币受 advanced credit and debit card payments 支持,您可以查看有关为您的帐户激活它并使用该自定义表单(托管字段)进行集成的信息。此方法告诉您details响应中卡片的品牌和最后一位数字。

functional继承模式 摘自javascript:the good parts_javascript技巧

functional继承模式 摘自javascript:the good parts_javascript技巧

这种模式的作用在于确保对象属性的真正私有化, 我们无法直接访问对象的状态, 只能通过特权方法来进行操作.
下面直接来个例子吧.

复制代码 代码如下:

var person = function(cfg) {
var that = {};
that.getName = function() {
return cfg.name || ''unknow name'';
};
// 性别 默认男性
that.getGender = function() {
return cfg.gender || ''male'';
};
return that;
};
var programmer = function(cfg) {
var that = person(cfg),
share = {};
share.status = ''normal'';
that.getFamiliarLanguage = function() {
return (cfg.langs || []).join('' '');
};
that.getProfile = function() {
return ''hi,my name is '' + that.getName();
};
that.getStatus = function() {
return share.status;
};
that.setStatus = function(status) {
share.status = status;
};
return that;
};
var me = programmer({
name: ''AndyZhang'',
gender: ''male'',
// 熟悉的语言
langs: [''javascript'', ''java'', ''php'']
});
console.debug(me.getFamiliarLanguage());
console.debug(me.getProfile());
me.setStatus(''oh really busy..'');
console.debug(me.getStatus());

从代码中可以看到,我们调用programmer方法时,没用使用new, 而且方法里也没有出现this关键字.
如果出现类似this.name = cfg.name这样的属性赋值代码, 再用new去调用(构造函数调用方式),这样产生的对象的name属性就不再私有.如:
复制代码 代码如下:

// 这里方法名的首字母大写 以表示作为一个构造方法 用new来调用
var Person = function(cfg) {
this.name = cfg.name;
this.gender = cfg.gender;
}
// new出一个person1
var person1 = new Person({
name: ''Andrew'',
gender: ''male''
});
// 本来是想让name, gender成为私有 用类似setter getter方法来读写 就像javaBean一样
alert(person1.name); // ''Andrew''
alert(person1.gender); // ''male''

从上面的例子可以看出person1的属性我们是可以直接访问的,没有做到真正的private. 有时候我们会用代码规范或约定来表示我们定义的某个属性是私有的,比如this._name用这样的写法表示name属性是私有的. 个人觉得只要约定统一,这也是一种不错的方式, 在第三方js库中,这种运用的可能比较多,像YUI2
继续看最开始的代码, 没有用到this, 而是用了that作为载体, 从programmer方法中我们看到that所起到的作用, 调用person后,返回的that已经具有了person所具有的方法getName, getGender, 然后我们根据programmer具体的需要在that基础上进行扩展, 当然也可以覆写原来的方法, programmer中的share可以用来集中一些私有变量和方法, 通过javascript的scope和closure机制, 可以在that扩展的方法中对它们进行处理和调用, 比如代码中的that.getStatus和that.setStatus方法, 最后return that.

javascript Array.prototype.slice使用说明_javascript技巧

javascript Array.prototype.slice使用说明_javascript技巧

除了正常用法,slice 经常用来将 array-like 对象转换为 true array.

名词解释:array-like object – 拥有 length 属性的对象,比如 { 0: ‘foo'', length: 1 }, 甚至 { length: ‘bar'' }. 最常见的 array-like 对象是 arguments 和 NodeList.

查看 V8 引擎 array.js 的源码,可以将 slice 的内部实现简化为:

复制代码 代码如下:

function slice(start, end) {
var len = ToUint32(this.length), result = [];
for(var i = start; i result.push(this[i]);
}
return result;
}


可以看出,slice 并不需要 this 为 array 类型,只需要有 length 属性即可。并且 length 属性可以不为 number 类型,当不能转换为数值时,ToUnit32(this.length) 返回 0.

对于标准浏览器,上面已经将 slice 的原理解释清楚了。但是恼人的 ie, 总是给我们添乱子:
复制代码 代码如下:

var slice = Array.prototype.slice;
slice.call(); // => IE: Object expected.
slice.call(document.childNodes); // => IE: JScript object expected.

以上代码,在 ie 里报错。可恨 IE 的 Trident 引擎不开源,那我们只有猜测了:
复制代码 代码如下:

function ie_slice(start, end) {
var len = ToUint32(this.length), result = [];

if(__typeof__ this !== ''JScript Object'') throw ''JScript object expected'';
if(this === null) throw ''Oject expected'';

for(var i = start; i result.push(this[i]);
}
return result;
}

至此,把猥琐的 ie 自圆其说完毕。

关于 slice, 还有一个话题:用 Array.prototype.slice 还是 [].slice ? 从理论上讲,[] 需要创建一个数组,性能上会比 Array.prototype 稍差。但实际上,这两者差不多,就如循环里用 i++ 还是 ++i 一样,纯属个人习惯。

最后一个话题,有关性能。对于数组的筛选来说,有一个牺牲色相的写法:
复制代码 代码如下:

var ret = [];
for(var i = start, j = 0; i ret[j++] = arr[i];
}

用空间换时间。去掉 push, 对于大数组来说,性能提升还是比较明显的。

一大早写博,心情不是很好,得留个题目给大家:
复制代码 代码如下:

var slice = Array.prototype.slice;
alert(slice.call({0: ''foo'', length: ''bar''})[0]); // ?
alert(slice.call(NaN).length); // ?
alert(slice.call({0: ''foo'', length: ''100''})[0]); // ?

javascript Array.prototype.slice的使用示例_javascript技巧

javascript Array.prototype.slice的使用示例_javascript技巧

经常的,可以看到Array.prototype.slice(arguments, 0); 这个写法可以用于function() {} 内,这样可以将函数的参数列表转换成一个真正的数组。请看一个例子:

复制代码 代码如下:

var slice = Array.prototype.slice;
var toString = Object.prototype.toString;
(function() {
  var args = arguments;
  console.log(args, toString.call(args)); // [1, 2, 3] "[object Arguments]"
  var argsArr = slice(args, 0);
  console.log(argsArr, toString.call(argsArr)); // [1, 2, 3] "[object Array]"
}(1,2,3))

我们可以看到函数的参数列表arguments通过slice调用以后,一秒钟变Array了。
同样的,也可以将选中的DOM元素转换成数组:
复制代码 代码如下:

slice.call(document.querySelectorAll("div"));

顺藤摸瓜,我们想想,slide方法是否可以将对象转换成数组呢?请看例子:
复制代码 代码如下:

console.log(slice.call(''string'')); // ["s", "t", "r", "i", "n", "g"]
console.log(slice.call(new String(''string''))); // ["s", "t", "r", "i", "n", "g"]

每次,字符串会直接被转换成了一个数组。
但是,数字,布尔值的会转换成一个空的数组:
复制代码 代码如下:

console.log(slice.call(33));
console.log(slice.call(true));

普通的对象也会被转换成空数组,除非你给它加上一个length属性:
复制代码 代码如下:

console.log(slice.call({name: ''obj''})); // []
console.log(slice.call({0: ''zero'', 1: ''one''})); // []
console.log(slice.call({0: ''zero'', 1: ''one'', name: ''obj'', length: 2}));  // ["zero", "one"]

还有,它还可以用来clone数组:
复制代码 代码如下:

var srcArr = [1,2,3];
var newArr = srcArr.slice(0);
console.log(srcArr, newArr);    // [1,2,3] [1,2,3]
console.log(srcArr == newArr);  // false

javascript Array.remove() 数组删除_javascript技巧

javascript Array.remove() 数组删除_javascript技巧

复制代码 代码如下:

Array.prototype.remove = function(b) {
var a = this.indexOf(b);
if (a >= 0) {
this.splice(a, 1);
return true;
}
return false;
};


以后使用过程中,就可以直接利用这个函数,删除数组中的值了。

我们今天的关于PayPal JavaScript SDK:获取基本卡信息 onApprove()paypal获取api密钥的分享就到这里,谢谢您的阅读,如果想了解更多关于functional继承模式 摘自javascript:the good parts_javascript技巧、javascript Array.prototype.slice使用说明_javascript技巧、javascript Array.prototype.slice的使用示例_javascript技巧、javascript Array.remove() 数组删除_javascript技巧的相关信息,可以在本站进行搜索。

本文标签: