首页 > 解决方案 > vbscript xmlhttp 完成客户端认证需要证书

问题描述

我正在尝试使用我认为在 VBS 中等效的 cURL 来获取 Paypal 访问令牌。这是我正在尝试https://developer.paypal.com/docs/api/get-an-access-token-curl/的 cURL 帖子 ,这是我正在使用的 VBScript 代码

<%
    Dim Base64, ClientID, Secret 
    ClientID    = "ClientID" 
    Secret      = "Secret" 
    Base64      = "Base64" 
    Dim XMLHTTP : Set XMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0") 
    XMLHTTP.setOption 2, 13056 
    XMLHTTP.Open "POST", "https://api.sandbox.paypal.com/v1/oauth2/token", False, ClientID, Secret 
    XMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
    XMLHTTP.setRequestHeader "Accept", "application/json" 
    XMLHTTP.setRequestHeader "Accept-Language", "en_US" 
    XMLHTTP.setRequestHeader "Authorization", "Basic " & Base64 
    XMLHTTP.Send("grant_type=client_credentials") 

服务器返回的错误是:

msxml6.dll error '80072f0c'

A certificate is required to complete client authentication

Paypal.asp, line 13 

我知道还有一个XMLHTTP.setOption 3, "LOCAL_MACHINE\My\api.sandbox.paypal.com"也可以添加到代码中,但是从我在文档中看到的内容来看,我不需要在服务器上安装任何证书。

[ 编辑 ]

这是解释此修复如何工作的代码。您可以使用自己的证书,它不需要是自签名证书,重要的部分是使用第 2 步。为证书分配权限以授予 Web 服务器使用该证书的权限。

<%
    Dim Base64, ClientID, Secret 
    ClientID    = "ClientID" 
    Secret      = "Secret" 
    Base64      = "Base64" 
    Dim XMLHTTP : Set XMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0") 
    XMLHTTP.setOption 2, 13056 
    XMLHTTP.setOption 3, "LOCAL_MACHINE\My\example.za.live" ' **Added** 
    XMLHTTP.Open "POST", "https://api.sandbox.paypal.com/v1/oauth2/token", False, ClientID, Secret 
    XMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
    XMLHTTP.setRequestHeader "Accept", "application/json" 
    XMLHTTP.setRequestHeader "Accept-Language", "en_US" 
    XMLHTTP.setRequestHeader "Authorization", "Basic " & Base64 
    XMLHTTP.Send("grant_type=client_credentials") 

标签: paypalvbscriptxmlhttprequestcertificateauthorization

解决方案


推荐阅读