Paypal 生成身份验证标头

Paypal 生成身份验证标头,paypal,Paypal,是否有一种方法可以通过不使用PayPal SDK为第三方生成身份验证标头。我已经拿到了他们的通行证和密码。然而,这些都是通过curl请求完成的,这对我来说很简单。有没有办法这样做 此外,要生成标头,我需要第三方的API签名?我怎样才能得到这个 感谢您的帮助。对于其他正在寻找PayPal X-PayPal-AUTHORIZATION标头值的node.js解决方案的人,我写了以下内容: function PayPalURLEncoder(s) { var hex = "0123456789a

是否有一种方法可以通过不使用PayPal SDK为第三方生成身份验证标头。我已经拿到了他们的通行证和密码。然而,这些都是通过curl请求完成的,这对我来说很简单。有没有办法这样做

此外,要生成标头,我需要第三方的API签名?我怎样才能得到这个


感谢您的帮助。

对于其他正在寻找PayPal X-PayPal-AUTHORIZATION标头值的node.js解决方案的人,我写了以下内容:

function PayPalURLEncoder(s)
{
    var hex = "0123456789abcdef";
    var untouched = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_";
    var result = s.split('').map(function(c){
        if (untouched.indexOf(c)>=0)    { return c; }
        else if (c==' ')                { return "+"; }
        else
        {
            // Needs converting to HEX
            var code = c.charCodeAt(0);
            return "%" + hex.charAt((code & 0xf0) >> 4) + hex.charAt(code & 0xf);
        }
    });
    return result.join('');
}

exports.authorizationToken = function(accessToken,method,endpoint)
{
    var PARAM_DELIMETER = "&";
    var PARAM_SEPERATOR = "=";
    var token = { key : accessToken.token, secret : accessToken.tokenSecret};
    var consumer = { key : global.config.paypal.username, secret : global.config.paypal.password };

    // Add params
    var params = {
        "oauth_consumer_key" : consumer.key,
        "oauth_version" : "1.0",
        "oauth_signature_method" : "HMAC-SHA1",
        "oauth_token" : token.key,
        "oauth_timestamp" : Math.round(new Date().getTime() / 1000),
    };

    // Convert params into paramString
    var paramKeys = [];
    var paramString = "";
    for (var p in params) { paramKeys.push(p); } paramKeys.sort();
    for (var i=0; i<paramKeys.length; i+=1)
    {
        var p = paramKeys[i];
        paramString += (p + PARAM_SEPERATOR + params[p]);
        if (i+1<paramKeys.length) paramString += PARAM_DELIMETER;
    }

    // Create signature
    var key = PayPalURLEncoder(consumer.secret) + PARAM_DELIMETER + PayPalURLEncoder(token.secret);
    var signatureBase = method + PARAM_DELIMETER + PayPalURLEncoder(endpoint) + PARAM_DELIMETER + PayPalURLEncoder(paramString);
    var signature = CryptoJS.HmacSHA1(signatureBase, key).toString(CryptoJS.enc.Base64);
    return "token="+token.key+",signature="+signature+",timestamp="+params["oauth_timestamp"];
};
函数PayPalURLEncoder
{
var hex=“0123456789abcdef”;
var untouched=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz1234567890”;
var结果=s.split(“”).map(函数(c){
if(untouched.indexOf(c)>=0){返回c;}
else如果(c=''){return“+”;}
其他的
{
//需要转换为十六进制
var代码=c.charCodeAt(0);
返回“%”+十六进制字符((代码&0xf0)>>4)+十六进制字符(代码&0xf);
}
});
返回结果。join(“”);
}
exports.authorizationToken=函数(accessToken、方法、端点)
{
var PARAM_DELIMETER=“&”;
变量参数分隔符=“=”;
var token={key:accessToken.token,secret:accessToken.tokenSecret};
var consumer={key:global.config.paypal.username,secret:global.config.paypal.password};
//添加参数
变量参数={
“oauth_consumer_key”:consumer.key,
“oauth_版本”:“1.0”,
“oauth_签名_方法”:“HMAC-SHA1”,
“oauth_令牌”:token.key,
“oauth_时间戳”:Math.round(new Date().getTime()/1000),
};
//将参数转换为参数字符串
var paramKeys=[];
var paramString=“”;
对于(varp in params){paramKeys.push(p);}paramKeys.sort();

对于(var i=0;i,对于任何正在寻找PayPal X-PayPal-AUTHORIZATION标头值的node.js解决方案的人,我写了以下内容:

function PayPalURLEncoder(s)
{
    var hex = "0123456789abcdef";
    var untouched = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_";
    var result = s.split('').map(function(c){
        if (untouched.indexOf(c)>=0)    { return c; }
        else if (c==' ')                { return "+"; }
        else
        {
            // Needs converting to HEX
            var code = c.charCodeAt(0);
            return "%" + hex.charAt((code & 0xf0) >> 4) + hex.charAt(code & 0xf);
        }
    });
    return result.join('');
}

exports.authorizationToken = function(accessToken,method,endpoint)
{
    var PARAM_DELIMETER = "&";
    var PARAM_SEPERATOR = "=";
    var token = { key : accessToken.token, secret : accessToken.tokenSecret};
    var consumer = { key : global.config.paypal.username, secret : global.config.paypal.password };

    // Add params
    var params = {
        "oauth_consumer_key" : consumer.key,
        "oauth_version" : "1.0",
        "oauth_signature_method" : "HMAC-SHA1",
        "oauth_token" : token.key,
        "oauth_timestamp" : Math.round(new Date().getTime() / 1000),
    };

    // Convert params into paramString
    var paramKeys = [];
    var paramString = "";
    for (var p in params) { paramKeys.push(p); } paramKeys.sort();
    for (var i=0; i<paramKeys.length; i+=1)
    {
        var p = paramKeys[i];
        paramString += (p + PARAM_SEPERATOR + params[p]);
        if (i+1<paramKeys.length) paramString += PARAM_DELIMETER;
    }

    // Create signature
    var key = PayPalURLEncoder(consumer.secret) + PARAM_DELIMETER + PayPalURLEncoder(token.secret);
    var signatureBase = method + PARAM_DELIMETER + PayPalURLEncoder(endpoint) + PARAM_DELIMETER + PayPalURLEncoder(paramString);
    var signature = CryptoJS.HmacSHA1(signatureBase, key).toString(CryptoJS.enc.Base64);
    return "token="+token.key+",signature="+signature+",timestamp="+params["oauth_timestamp"];
};
函数PayPalURLEncoder
{
var hex=“0123456789abcdef”;
var untouched=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz1234567890”;
var结果=s.split(“”).map(函数(c){
if(untouched.indexOf(c)>=0){返回c;}
else如果(c=''){return“+”;}
其他的
{
//需要转换为十六进制
var代码=c.charCodeAt(0);
返回“%”+十六进制字符((代码&0xf0)>>4)+十六进制字符(代码&0xf);
}
});
返回结果。join(“”);
}
exports.authorizationToken=函数(accessToken、方法、端点)
{
var PARAM_DELIMETER=“&”;
变量参数分隔符=“=”;
var token={key:accessToken.token,secret:accessToken.tokenSecret};
var consumer={key:global.config.paypal.username,secret:global.config.paypal.password};
//添加参数
变量参数={
“oauth_consumer_key”:consumer.key,
“oauth_版本”:“1.0”,
“oauth_签名_方法”:“HMAC-SHA1”,
“oauth_令牌”:token.key,
“oauth_时间戳”:Math.round(new Date().getTime()/1000),
};
//将参数转换为参数字符串
var paramKeys=[];
var paramString=“”;
对于(varp in params){paramKeys.push(p);}paramKeys.sort();

对于(var i=0;i,基于Aku共享的代码,我已将其移植到Python。不幸的是,这仍然导致验证失败响应,错误代码为10002.FWIW,如下所示:

from hashlib import sha1
import hmac
from base64 import b64encode
from urllib import urlencode
from datetime import datetime

def paypal_urlencode(s):
    encode = lambda x: x if x in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_+" else '%%%x' % ord(x)
    return ''.join(map(encode, s.replace(' ','+')))

def paypal_authorisation(token, ep, consumer, method="POST", sandbox=True):
    params = dict(
        oauth_consumer_key=consumer['key'],
        oauth_version='1.0',
        oauth_signature_method="HMAC-SHA1",
        oauth_token=token['key'],
        oauth_timestamp=datetime.now().strftime('%s')
    )
    key = "&".join((paypal_urlencode(consumer['secret']), paypal_urlencode(token['secret'])))
    sig_base = "&".join((method, paypal_urlencode(ep), paypal_urlencode("oauth_consumer_key=%(oauth_consumer_key)s&oauth_signature_method=%(oauth_signature_method)s&oauth_timestamp=%(oauth_timestamp)s&oauth_token=%(oauth_token)s&oauth_version=%(oauth_version)s" % params)))
    h= hmac.new(key.encode('ascii'), sig_base.encode('ascii'), sha1)
    signature=b64encode(h.digest())

    return "token=%s,signature=%s,timestamp=%s" % (token['key'], signature, params['oauth_timestamp'])

基于Aku共享的代码,我已将其移植到Python中。不幸的是,这仍然导致身份验证失败响应,错误代码为10002.FWIW,如下所示:

from hashlib import sha1
import hmac
from base64 import b64encode
from urllib import urlencode
from datetime import datetime

def paypal_urlencode(s):
    encode = lambda x: x if x in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_+" else '%%%x' % ord(x)
    return ''.join(map(encode, s.replace(' ','+')))

def paypal_authorisation(token, ep, consumer, method="POST", sandbox=True):
    params = dict(
        oauth_consumer_key=consumer['key'],
        oauth_version='1.0',
        oauth_signature_method="HMAC-SHA1",
        oauth_token=token['key'],
        oauth_timestamp=datetime.now().strftime('%s')
    )
    key = "&".join((paypal_urlencode(consumer['secret']), paypal_urlencode(token['secret'])))
    sig_base = "&".join((method, paypal_urlencode(ep), paypal_urlencode("oauth_consumer_key=%(oauth_consumer_key)s&oauth_signature_method=%(oauth_signature_method)s&oauth_timestamp=%(oauth_timestamp)s&oauth_token=%(oauth_token)s&oauth_version=%(oauth_version)s" % params)))
    h= hmac.new(key.encode('ascii'), sig_base.encode('ascii'), sha1)
    signature=b64encode(h.digest())

    return "token=%s,signature=%s,timestamp=%s" % (token['key'], signature, params['oauth_timestamp'])

你能澄清一下这是哪种产品吗?当然。我使用的是1c Enterprise,我是如何通过将Curl调用分解为HTTPRequests之类的方式进行调用的。下面是我如何调用请求令牌的示例(替换了我的API详细信息)。在这种情况下,我必须尝试以相同的方式获取api签名或身份验证标头。遗憾的是,这是我所能做的极限。对不起,我指的是PayPal产品。查看粘贴,我可以看到您指的是权限api。我不确定您指的是什么产品。但我正在尝试获得代表发送和创建发票的权限第三方的。我浏览了所有的指南。我成功地创建了访问令牌和密码。我只是在创建身份验证头时遇到了困难。我想知道除了使用paypal sdk之外是否还有其他方法。比如通过一些curl请求。你能澄清这是哪种产品吗?当然。我正在使用1c Enterprise和我如何调用是通过将Curl调用分解为HTTPRequests之类的。在这种情况下,我必须尝试以相同的方式获取api签名或身份验证标头。遗憾的是,这是我所能做的极限。对不起,我指的是PayPal产品。查看粘贴,我可以看到您指的是权限api。我不确定您指的是什么产品。但我正在尝试获得代表发送和创建发票的权限第三方的。我阅读了所有的指南。我成功地创建了访问令牌和密码。我只是在创建身份验证头时遇到了困难。我想知道除了使用paypal sdk之外,是否还有其他方法。比如通过一些curl请求。