1. 准备工作
这是一个自助式 Codelab,它将分步说明如何与 Standard Payments API 建立连接。
前提条件
- 您已完成实现过程中的第 1 步和第 2 步。
- 您可以使用 Google App Engine 或您自己在通过 Google 配置的网域中的解决方案,托管所提供的具有 TLS 终结功能的 Node.js 服务器。
- 您的环境中已安装 Node.js。
学习内容
- 如何向 Google Standard Payments echo API 发出有效请求,以验证连接。
- 如何接收从 Google 到合作伙伴托管的 Echo API 的请求以及对其进行解密和解析。
2. 设置和要求
下载应用
下载 Node.js 示例代码。
安装依赖项
前往项目目录,然后运行以下命令以安装所需的依赖项。如果您使用的是 App Engine,则可以跳过此步骤。
npm install
3. 配置付款集成商账号 ID (PIAID)
付款集成商账号 ID (PIAID) 是用于唯一识别您的集成的标识符。在开始学习本教程之前,您应已满足前提条件并收到 Google 提供的 PIAID。
- 前往项目目录中的
server.js文件。 - 将变量
PIAID设置为 Google 发送给您的 PIAID。
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';
4. 添加 PGP 密钥
在项目结构中创建以下文件并添加您的 PGP 密钥以启用 PGP 加密。
- 创建一个名为
public.key的文件,并将 ASCII 封装的公钥添加到该文件中。 - 创建一个名为
private.key的文件,并将 ASCII 封装的私钥添加到该文件中。 - 创建一个名为
passphrase.txt的文件,并将口令添加到该文件中。

太棒了,您可以开始运行应用了!
5. 运行应用
如需启动应用,请执行以下命令。
$ node server.js Server listening on port 8080...
如果您运行的是预配置的 App Engine 实例,请改为运行以下命令。
$ gcloud app deploy
默认情况下,服务器将侦听端口 8080。
6. 测试 Google Standard Payments API 连接
现在,该应用正在运行,此时可以测试与 Google Standard Payments echo API 的连接性。
运行以下命令,从示例应用的实例向 Google 服务器发起调用。示例应用 echo API 接受明文形式的 POST 请求。收到该请求后,会有后续请求发送至 Google 托管的 API。
$ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo
成功的 API 请求将导致来自 Google 的以下响应。
{
"responseHeader":{
"responseTimestamp":"1606710026723"
},
"clientMessage":"Hello from Little Bear",
"serverMessage":"Server message."
}
详细路线
现在,服务器已成功发送请求,下面我们来了解一下它是如何工作的。
构建请求
bodyHelpers.js 中的 buildEchoRequestBody 构建发送至 Google API 的 echo 请求。
const message = bodyHelpers.buildEchoRequestBody(req.body);
生成的请求包括 clientMessage 以及多个默认值字段。
{
"requestHeader":{
"protocolVersion":{
"major":1,
"minor":0,
"revision":0
},
"requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
"requestTimestamp":"1606715389040"
},
"clientMessage":"Hello from Little Bear"
}
加密请求
所有请求都已加密并采用 base64url 进行了编码。在此示例中,crypto.js 包含为您执行加密和解密的辅助方法。crypto.encrypt 方法使用 Google 的公钥执行加密。
const encrypted = await crypto.encrypt(message);
发送采用 base64url 编码的 POST 请求
加密消息是使用 base64url 软件包编码的 base64url 格式,并使用 axios 通过 POST 请求进行发送。
const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);
解密并返回响应
Google 的成功响应是采用 base64url 编码和加密的,因此需要先对其进行解码和解密,然后才能返回明文。
const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);
7. 测试 Partner API 连接
为了测试合作伙伴 echo API 连接性,Google 会向合作伙伴托管的 echo API 发送请求。
当您准备就绪时,请与您的 Google 联系人合作以触发来自 Google 的此请求。
如果您能够读取来自 Google 的入站 echo 请求并通过有效的 echo 响应进行响应,echo 测试就完成了。
详细路线
现在,服务器已成功接收和处理请求,下面我们来了解一下它是如何工作的。
对请求进行 Base64url 解码
收到请求后,您首先需要对其进行 base64url 解码。
const encryptedRequest = base64url.toBuffer(req.body);
解密请求
对请求进行 base64url 解码后,您需要对其进行解密。
const decryptedRequest = await crypto.decrypt(encryptedRequest);
接收请求
在解码和解密请求后,Google 会发送类似如下所示的消息载荷。
{
"requestHeader": {
"protocolVersion": {
"major": 1
},
"requestId": "G1MQ0YERJ0Q7LPM",
"requestTimestamp": {
"epochMillis":1481899949606
},
"paymentIntegratorAccountId": "abcdef123456"
},
"clientMessage": "echo Me"
}
构建响应
成功读取入站 echo 请求后,即可构建响应。
clientMessage = JSON.parse(decryptedRequest).clientMessage;
responseBody = bodyHelpers.buildEchoResponseBody(clientMessage);
此响应包括来自 Google 的消息,以及来自服务器的时间戳和消息。
{
"responseHeader": {
"responseTimestamp": {
"epochMillis":1481899950236
}
},
"clientMessage": "echo Me",
"serverMessage": "Debug ID 12345"
}
对响应进行加密和 base64 编码
设置好响应消息后,您即可对其进行加密和 base64url 编码了。
encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);
返回响应
最后,您就可以发送 POST 响应了。
res.send(encodedResponse);
8. 恭喜!
在此 Codelab 中,您已成功与 Echo API 建立连接!