Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在益百利api中生成签名_Php_.net - Fatal编程技术网

Php 如何在益百利api中生成签名

Php 如何在益百利api中生成签名,php,.net,Php,.net,我想用php生成誓言签名,但益百利的文档是用.net编写的。我试着问益百利的开发者,但他没有很好的回应。我使用以下代码来开发誓言签名: $timestamp=1461944620;//时隙 $nonce=3774707;//暂时 $consumerKey=“e172b7b1-056f-48be-aeca-a641a60c88ea”//消费者密钥-由益百利开发提供 $ConsumerCret=“1c339256-2e1c-48bb-82c2-8e33abe550fd”//消费者机密-由益百利开发公

我想用php生成誓言签名,但益百利的文档是用.net编写的。我试着问益百利的开发者,但他没有很好的回应。我使用以下代码来开发誓言签名:

$timestamp=1461944620;//时隙

$nonce=3774707;//暂时

$consumerKey=“e172b7b1-056f-48be-aeca-a641a60c88ea”//消费者密钥-由益百利开发提供

$ConsumerCret=“1c339256-2e1c-48bb-82c2-8e33abe550fd”//消费者机密-由益百利开发公司提供

$url=”“;/Url-由益百利开发公司提供

$httpMethod=“GET”

$params=“oauth_consumer_key=“.$consumerKey.”和oauth_nonce=“.$nonce.”和oauth_signature_method=HMAC-SHA1和oauth_timestamp=“.$timestamp.”和oauth_version=1.0”

$urlEncoded=urlencode($url);//Url编码

$paramsEncoded=urlencode($params);//Url编码

$signatureBase=$httpMethod.&“$URLCoded.”和“$paramsEncoded;”//签名库-根据您的文档进行分类

$key=urlencode($consumerSecret)。“&”//mysecretkey&-url编码秘密kay后跟符号

$signatureBytes=hash_hmac(“sha1”,$signatureBase,$key);//转换为sha1

$signature=base64_编码($signatureBytes);//base64编码

$signatureEncoded=urlencode($signature);//签名url编码。这是最终签名,与我在上一封电子邮件中描述的您的签名不匹配

我已经签署了“NJDHNTUY2M2MDMCYMTQ2ZDNKZWFJYJUXODLOGQ3MGZLZWM1MG%3D%3D”的签名,但益百利开发商表示,根据上述细节,必须签署“Z6VSBWzGByFG096stRhejXD%2b7FI%3D”的宣誓签名

以下是生成宣誓书签名的文档:

手动生成签名 1.我们需要按字母顺序对查询参数进行排序,并添加几个参数,然后将它们组合成一个字符串。这个字符串看起来像是一个标准的查询字符串,但实际上并不打算按原样将其发送到服务器。 oauth_consumer_key=myconsumerkey&oauth_nonce=123456&oauth_signature_method=HMAC-SHA1&oauth_timestamp=999999&oauth_version=1.0 重要的是,字符串看起来与此完全相同,只有三个斜体值替换为您的值

  • 我们需要生成一个可以散列的签名基字符串。此字符串由HTTP方法、URL编码的URL和URL编码的查询字符串组成
  • 假设您发布到“上面提供url(demo.backgroundchecking.com/API/Service/ProductCodes)”,那么签名库将如下所示(换行符仅用于可读性,应该是一行): 3.职位& 4.https%3A%2F%2Fuat.backgroundchecking.com%2FAPI%2FData%2FRequestData& 5.oauth_使用者_密钥%3Dmyconsumerkey%26oauth_当前值%3D123456%26oauth_签名_方法%3DHMAC-SHA1%26oauth_时间戳%3d9999%26oauth_版本%3D1.0

    如您所见,签名基字符串由三个单独的元素组成,HTTP方法、URL和步骤1中的参数,所有元素之间用&分隔。 在将这三个部分组合到签名基字符串中之前,对它们进行URL编码是很重要的,否则分隔的&也将被编码,请求将失败。请注意,十六进制值必须为大写,即%2F而不是%2F。 注意本例中的uat.backgroundchecking.com,当然需要 已更改为所使用系统的相应URL

    另一个例子是,如果您是从demo.backgroundchecking.com/API/Service/ProductCodes获取的,那么签名基字符串将如下所示(方法和URL不同): 得到& https%3A%2F%2Fuat.backgroundchecking.com%2FAPI%2FService%2FProductCodes& oauth_使用者_密钥%3Dmyconsumerkey%26oauth_当前值%3D123456%26oauth_签名_方法%3DHMAC-SHA1%26oauth_时间戳%3d9999%26oauth_版本%3D1.0

  • 接下来,我们需要获取生成散列的密钥。密钥是消费者机密,后跟一个符号,例如“mysecretkey&”。请注意,如果使用者密钥包含URL中不合法的字符,则需要在添加符号和之前对使用者密钥进行URL编码

  • 然后我们需要生成HMAC-SHA1散列并将其作为Base64编码字符串返回。这通常通过库来完成。一般来说,您应该期望使用ASCII编码将密钥和签名库转换为字节数组,然后使用步骤3中的密钥生成签名库的哈希

  • 因为Base64包含某些在URL中不合法的字符,所以我们需要对哈希进行URL编码,然后才能使用它

  • 例如: 1.[int]$timestamp=((获取日期).ToUniversalTime()-(获取日期-Date“1970-01-01 00:00:00Z”).ToUniversalTime()).TotalSeconds

  • $timestamp=999999#用我们的样本值覆盖

  • $nonce=123456#在生产中,确保每个请求都是随机的

  • $consumerKey=“myconsumerkey”

  • $consumerSecret=“mysecretkey”

  • $url=与上面提供的相同

  • $httpMethod=“POST”

  • $regex=[regex]'%[a-f0-9]{2}'#oAuth要求十六进制值为大写,.NET默认为小写,因此我们需要对regex进行一些处理

  • $params=“oauth_consumer_key=“+$consumerKey+”&oauth_nonce=“+$nonce+”&oauth_签名方法=HMAC-SHA1&oauth_时间戳=“+$timestamp+”&oauth_版本=1.0”

  • $urlEncoded=$regex.Replace([System.Web.HttpUtility]::UrlEncode($url),{param($m)$m.Value.ToUpperInvariant()})

  • $paramsEncoded=$regex.Replace([System.Web.HttpUtility]::UrlEncode($params),{param($m)$m.Value.ToUpperInvariant()})

  • $signatureBase=$httpMethod+“&”+$urlEncoded+“&”+$paramsEncoded

  • $key=$regex.Replace([System.Web.HttpUtility]::UrlEncode($consumerSecr)
    $timestamp = time(); 
    $nonce = 5678765; 
    $consumerKey = "consumerkey"; 
    $consumerSecret = "secret"; 
    $url = "demo.backgroundchecking.com/API/Service/ProductCodes";
    $httpMethod = "GET"; 
    $params = "oauth_consumer_key=".$consumerKey."&oauth_nonce=".$nonce."&oauth_signature_meth‌​od=HMAC-SHA1&oauth_timestamp=".$timestamp."&oauth_version=1.0"; 
    $urlEncoded = urlencode($url); 
    $paramsEncoded = urlencode($params); 
    $signatureBase = $httpMethod."&".$urlEncoded."&".$paramsEncoded; 
    $key = urlencode($consumerSecret)."&"; 
    $signature = urlencode(base64_encode(hash_hmac('sha1', $signatureBase, $key, true)));