处理 - sdk
使用 new Processing(options: ProcessingOptions) 以创建处理对象实例。 处理对象是处理 SDK 的切入点 .
interface ProcessingOptions {
apiUrl: string;
fingerprintVisitorId: string;
sessionId: string;
isSecure?: boolean; // default false
retryOptions?: RetryOptions; // default {}
}
const processing = new Processing({
apiUrl: 'api-url',
fingerprintVisitorId: 'fingerprint-visitor-id',
sessionId: 'session-id',
});
构造器验证其选项并扔出一个 TypeError 当它们不是对象时, 当它们包含一个未知的密钥( 例如拼写错误) issecure),何时 apiUrl, (中文(简体) ), fingerprintVisitorId 或者说 sessionId 缺少, 是否为空字符串, 当 isSecure 不是一个布尔,或者何时 retryOptions 格式错误( 见 检索和错误诊断) (中文(简体) ).
检索和错误诊断
失败的 HTTP 请求会自动以指数回放重试( S)100ms → 200ms → 500ms → 1000ms → 2000ms; 第5回等2000ms后每回试. 可以通过可选配置回覆 retryOptions 构造器选项 :
interface RetryOptions {
retryCount?: number; // number of retries after the initial attempt, default 5; 0 disables retries
retryStatusCode?: (statusCode: number) => boolean; // default: statusCode < 200 || statusCode === 408 || statusCode >= 500
}
const processing = new Processing({
apiUrl: 'api-url',
fingerprintVisitorId: 'fingerprint-visitor-id',
sessionId: 'session-id',
retryOptions: { retryCount: 3 },
});
要完全禁用重试, 请通过 retryCount: 0 如0.11.0所示,每一份请求都会发出一次。 错误诊断RequestError,则 console.error 仍可收集:
const processing = new Processing({
apiUrl: 'api-url',
fingerprintVisitorId: 'fingerprint-visitor-id',
sessionId: 'session-id',
retryOptions: { retryCount: 0 },
});
建筑师扔出一个 TypeError 何时 retryOptions 不是物体, retryCount 不是一个非负整数,或 retryStatusCode 不是一个函数.
网络出错( 浏览器完全无法到达服务器, 例如 ) . TypeError: Failed to fetch),或者在读取反应机体时连接下降)也总是被重试.
每一次重试都用 console.warn当请求最终失败时, SDK 日志 console.error (单位:千美元)sdk-js: request failed: <message>完全诊断的垃圾堆和拒绝的垃圾堆 RequestError 谁 diagnostics 字段载有同样的有效载荷——包括在您错误报告中. diagnostics.kind 告诉失败阶层:
"network"——浏览器从未获得完整的响应(例如.TypeError: Failed to fetch,或无法读取尸体;diagnostics.error描述抛出的错误,diagnostics.response.status当信头在故障前到达时就在场,message实值request to <url> failed after N attempt(s): ...· ;"http_error"错误反应(非200状态,或error(a) 实体内;message是来自响应机构(或unexpected response status <code>当尸体没有的时候,diagnostics.response.status带有 HTTP 状态,并diagnostics.response.error机构错误文本;"invalid_json"- 反应机构不是有效的JSONdiagnostics.error(解析出的错误;其信息遵循与机构相同的政策——为非200个进行消毒,为200个答复省略)和diagnostics.response已经设定.
每个 diagnostics 有效载荷还包括:
sdkVersion· ;request:url,方法,x-request-id,会话 id 和 任意日志attempts: [{ durationMs, status?, error? }]尝试持续时间有助于从绞刑(出站/手摇)中看出即时失败(DNA/连接被拒绝);response.body对于非200个答复——短到500个带有长数字的字符被蒙住(***200份答复的正文从未列入,因为它可能携带会议全权证书;请求机构从未列入任何地方;response.error- 那个error对于任何状态(包括200份答复,包括:error字段);它是一个商业错误文本,因此既不被截断,也不被遮盖;environment数字 :navigator.onLine, (中文(简体) ),document.visibilityState, (中文(简体) ),navigator.connection(单位:千美元)effectiveType编号 :rtt编号 :downlink只有铬),时间戳.
无论复试是否启用,都要收集诊断.
SDK 识别头
SDK的每个请求都带有一个额外的标题:
x-pgw-sdk: sdk-js/<version>
该值包含 SDK 名称和版本( 与 SDK 同步) package.json ——例如 sdk-js/0.11.0. 后端使用这个头来识别来自官方SDK集成的流量——例如当安全固定放行时通知受影响的商人. 它不影响认证或请求路由.
每个请求都会自动添加标题,不能禁用.
API 密码
处理.getSession ()
使用 processing.getSession 以获取会话信息(支付方法、证书字段、业务金额和货币、入帐凭证)来制作表格。 这是可选的: submitForm 并不依赖于它,可以在构建实例后立即被调用.
processing
.getSession()
.then(result => console.log(result))
.catch(error => console.warn(error));
正在处理. sumitForm( 数据)
使用 processing.submitForm 以提交交易。 当呼叫时, processing.submitForm 将试图完成处理交易所需的任何行动。 这种方法返回以响应解决的许诺( E){ "type": "redirect", "redirectUrl": string})或描述失败的错误.
processing
.submitForm(data)
.then(result => console.log(result))
.catch(error => console.warn(error));
使用量
只提交
最小流量是构建实例和呼叫 submitForm ——无需再提出其他要求. 当您自己的用户界面已经知道要向客户收取什么时使用它(例如,付款方法及其证书字段固定在您一边):
import { Processing } from "@finteqhub/sdk-js";
import FingerprintJS from "@fingerprintjs/fingerprintjs";
const fp = await FingerprintJS.load();
const result = await fp.get();
const processing = new Processing({ apiUrl, fingerprintVisitorId: result.visitorId, sessionId });
const data = {/** collect data from form **/}
processing
.submitForm(data)
.then(result => console.log(result))
.catch(error => console.warn(error));
从会话数据渲染窗体
打电话 getSession 当窗体本身从会话中构建时:可用的支付方法、其证书字段、操作金额和货币. submitForm 不使用结果—— 它只驱动您的 UI :
const processing = new Processing({ apiUrl, fingerprintVisitorId: result.visitorId, sessionId });
const session = await processing.getSession();
const data = {/** collect data from form rendered from session **/}
processing
.submitForm(data)
.then(result => console.log(result))
.catch(error => console.warn(error));
释放
在每个版本的突起更新上 两者 package.json version 财务报告和审定财务报表 SDK_VERSION 内 src/version.ts 他们必须保持同步 所以 x-pgw-sdk 标题报告正确的版本 . src/version.test.ts 如果它们漂移, CI 失败( N)node scripts/sync-version.js 更新 src/version.ts 从 package.json) (中文(简体) ). 说明释放情况 变动情况,包括用于突破变化的移民笔记.
Beta 发布
要尝试修改后, 才会撞出版本, 请运行 publish-beta 工作流程(GitHub – Actions – 发布-β – 运行工作流程,选择你的分支). 它出版 <current version>-beta.<run number> 到 npm 下边 beta {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}这太夸张了 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}我.. latest 而Repo中的版本则保持不变。 安装于 :
npm i @finteqhub/sdk-js@beta
或将工作流程摘要中打印的确切版本标出.