@alipay/ams-checkout 2.0.3 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -82,6 +82,21 @@ export var AMSCheckoutPage = /*#__PURE__*/function () {
82
82
  },
83
83
  eventCode = _ref.event,
84
84
  data = _ref.data;
85
+ if (eventCode && eventCode !== null && eventCode !== void 0 && eventCode.startsWith('getDomain')) {
86
+ var _window, _window2;
87
+ var hostname = (_window = window) === null || _window === void 0 || (_window = _window.location) === null || _window === void 0 ? void 0 : _window.hostname;
88
+ _this.logger.logInfo({
89
+ code: 'a3753.b146681',
90
+ msg: hostname
91
+ }).send();
92
+ var content = _objectSpread(_objectSpread({}, dataObj === null || dataObj === void 0 ? void 0 : dataObj.context), {}, {
93
+ data: {
94
+ doMain: (_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.location) === null || _window2 === void 0 ? void 0 : _window2.hostname
95
+ },
96
+ event: 'appEventCallback'
97
+ });
98
+ _this.dispatchToApp(content);
99
+ }
85
100
  if (code && code.startsWith('SDK_PAYMENT')) {
86
101
  var _this$eventListener;
87
102
  console.log('[antom-web-sdk] <antom-checkout-page> eventListenerWrapper', event, message, result);
@@ -0,0 +1,10 @@
1
+ export declare enum ProductScene {
2
+ EXPRESS_CHECKOUT = "EXPRESS_CHECKOUT",
3
+ ELEMENT_PAYMENT = "ELEMENT_PAYMENT"
4
+ }
5
+ interface EventScenario {
6
+ eventName: ProductScene;
7
+ supportedEvents: string[];
8
+ }
9
+ export declare const productEventScenarios: EventScenario[];
10
+ export {};
@@ -0,0 +1,17 @@
1
+ // 定义产品场景的枚举
2
+ export var ProductScene = /*#__PURE__*/function (ProductScene) {
3
+ ProductScene["EXPRESS_CHECKOUT"] = "EXPRESS_CHECKOUT";
4
+ ProductScene["ELEMENT_PAYMENT"] = "ELEMENT_PAYMENT";
5
+ return ProductScene;
6
+ }({});
7
+
8
+ // 定义一个事件场景的接口
9
+
10
+ // 存储产品场景及支持的事件名
11
+ export var productEventScenarios = [{
12
+ eventName: ProductScene.EXPRESS_CHECKOUT,
13
+ supportedEvents: [] // 没有支持的事件
14
+ }, {
15
+ eventName: ProductScene.ELEMENT_PAYMENT,
16
+ supportedEvents: ['paymentMethodChanged', 'valuesChanged'] // 支持的事件
17
+ }];
@@ -1,4 +1,4 @@
1
- import { AddressMountOptions, ICommonApiResponse, IElementOptions, IPaymentApiResponse, LinkAuthMountOptions, PaymentMountOptions } from '../type';
1
+ import { AddressMountOptions, EventDataMap, EVENTNAME, ICommonApiResponse, IElementOptions, IPaymentApiResponse, LinkAuthMountOptions, PaymentMountOptions, SubmitFuncParams } from '../type';
2
2
  declare class ElementController {
3
3
  private options;
4
4
  private elementContainer;
@@ -33,7 +33,7 @@ declare class ElementController {
33
33
  validateFields(): Promise<{
34
34
  isValid: boolean;
35
35
  }>;
36
- submitPayment(): Promise<IPaymentApiResponse>;
36
+ submitPayment(submitParams: SubmitFuncParams): Promise<IPaymentApiResponse>;
37
37
  private changeLoading;
38
38
  private addEventListener;
39
39
  private sendRequestAndWaitWebLaunch;
@@ -44,5 +44,7 @@ declare class ElementController {
44
44
  private destroyHandle;
45
45
  destroy(): void;
46
46
  private setControllerStatusOrView;
47
+ on<T extends EVENTNAME>(event: T, callback: (data: EventDataMap[T]) => void): void;
48
+ private isEventAllowed;
47
49
  }
48
50
  export default ElementController;
@@ -23,8 +23,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
23
23
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
24
24
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
25
25
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
26
- import { ServiceProvider } from "../../../../foundation/service";
27
- import { ELEMENT_SPM_MAP } from "../../../../util/spm-map";
26
+ import { productEventScenarios, ProductScene } from "../config";
28
27
  import { cleanMockup, removeRetentionPopup } from "../../../../component/component.popup.style";
29
28
  import { destroyModal } from "../../../../component/popupWindow.style";
30
29
  import { ERRORMESSAGE, EVENT, PROMISE_CALLBACK_CODE } from "../../../../constant";
@@ -34,14 +33,16 @@ import PaymentProcessor from "../../../../core/component/element/elementProcesso
34
33
  import { IElementStatus } from "../../../../foundation";
35
34
  import { AntomSDKCore } from "../../../../foundation/core";
36
35
  import { ElementProcessor } from "../../../../foundation/product-processor/element";
36
+ import { ServiceProvider } from "../../../../foundation/service";
37
+ import { convertPaymentSession } from "../../../../foundation/utils/payment_context_utils";
37
38
  import { ProductSceneEnum } from "../../../../types";
39
+ import { ELEMENT_SPM_MAP } from "../../../../util/spm-map";
38
40
  import { ElementContainerService } from "../elementContainerService"; // 引入 ElementContainerService
39
41
  import { IContainerStatus } from "../elementContainerService/containerService";
40
42
  import { EventCenter as ElementEventCenter } from "../EventCenter/index";
41
43
  import { oneAccountUpdate, sdkActionUpdate } from "../mock";
42
44
  import { ElementPaymentEvent, ElementPaymentMethod, ElementType, EventCallbackCode, EXPOSURE_API_EVENT, MountElementType, PaymentStatus } from "../type";
43
- import { checkCanMount, checkCanUpdate, handleRedirect, isLoadErrorPage, safeStringify, showToast } from "../util";
44
- import { convertPaymentSession } from "../../../../foundation/utils/payment_context_utils";
45
+ import { checkCanMount, checkCanUpdate, handleRedirect, isLoadErrorPage, safeParse, safeStringify, showToast } from "../util";
45
46
  var TIMEOUT_DURATION = 10000;
46
47
  var ElementController = /*#__PURE__*/function () {
47
48
  function ElementController(options) {
@@ -77,7 +78,10 @@ var ElementController = /*#__PURE__*/function () {
77
78
  event.emitAndListen({
78
79
  event: ElementPaymentEvent.SUBMIT_PAY,
79
80
  data: {
80
- params: _objectSpread({}, params),
81
+ params: _objectSpread(_objectSpread({}, params), {}, {
82
+ doMain: window.location.hostname
83
+ // sessionResult: this.parseData, 该参数在应用层好像没有使用 TODO
84
+ }),
81
85
  target: target,
82
86
  source: ElementPaymentMethod.CONTAINER_ELEMENT
83
87
  }
@@ -89,13 +93,16 @@ var ElementController = /*#__PURE__*/function () {
89
93
  this.options = options;
90
94
  var _options = options;
91
95
  this.onStatusChangeCallback = _options === null || _options === void 0 ? void 0 : _options.onStatusChangeCallback;
96
+ // 初始化 this.elementContainer 的 status 为 INITING
92
97
  this.elementContainer = new AntomSDKCore();
93
98
  this.elementContainer.registerProcessor(ProductSceneEnum.ELEMENT_PAYMENT, '', new ElementProcessor());
99
+ // 初始化实例 id,监听 onRedirect 事件
94
100
  this.elementContainer.init(this.options, ProductSceneEnum.ELEMENT_PAYMENT);
95
101
  this.initService();
96
102
  this.elementContainerService = new ElementContainerService({
97
103
  instanceId: this.elementContainer.getInstanceId()
98
104
  });
105
+ // status 设置为 READY
99
106
  this.setControllerStatusOrView(IElementStatus.READY);
100
107
  this.elementEventCenter = new ElementEventCenter({
101
108
  logger: this.elementContainer.getServiceProvider().getService('Log')
@@ -205,6 +212,7 @@ var ElementController = /*#__PURE__*/function () {
205
212
  key: "initializeAndMountProcessor",
206
213
  value: function initializeAndMountProcessor(type, selector, options) {
207
214
  this.initElementProcessors(type);
215
+ // 创建 iframe,拉起应用页面,同时监听全局的数据更新和获取事件
208
216
  this.elementContainerService.mount({
209
217
  type: type,
210
218
  selector: selector,
@@ -241,6 +249,7 @@ var ElementController = /*#__PURE__*/function () {
241
249
  key: "mount",
242
250
  value: function mount(renderOptions, sdkSelector) {
243
251
  var _this2 = this;
252
+ // 此处的 id 是 sessionData && 分割的前3位
244
253
  var _convertPaymentSessio = convertPaymentSession(this.options.sessionData),
245
254
  sessionData = _convertPaymentSessio.id;
246
255
  var startEventId = this.elementEventCenter.registerEvent(EXPOSURE_API_EVENT.MOUNT, sessionData);
@@ -264,6 +273,7 @@ var ElementController = /*#__PURE__*/function () {
264
273
  return;
265
274
  }
266
275
  _this2.clearAndSetInitTimeout(readyCallback);
276
+ // 回调 loading 的 onStartLoading
267
277
  _this2.changeLoading(true);
268
278
  try {
269
279
  var startBizFlowData = {
@@ -272,10 +282,14 @@ var ElementController = /*#__PURE__*/function () {
272
282
  appendAliasContainerId: true
273
283
  })
274
284
  };
285
+ // status 设置为 IN_BIZ_FLOW
275
286
  _this2.setControllerStatusOrView(IElementStatus.IN_BIZ_FLOW);
276
287
  _this2.elementContainer.startBizFlow(startBizFlowData);
288
+ // 创建 iframe 加载应用页面
277
289
  _this2.initializeAndMountProcessor(renderOptions.type, sdkSelector, renderOptions);
290
+ // 监听应用页面 onLaunch 事件,请求 sdkAction.query 接口的数据,请求完成后处理数据异常情况或发送 renderComponent 事件及数据给应用层渲染页面内容
278
291
  _this2.sendRequestAndWaitWebLaunch(renderOptions, readyCallback);
292
+ // 监听事件
279
293
  _this2.addEventListener(readyCallback);
280
294
  _this2.serviceMap.EventCenter.addIFrame(_this2.elementContainerService.getContainerService(renderOptions.type).getContainerService().getWebApp());
281
295
  } catch (error) {
@@ -337,7 +351,7 @@ var ElementController = /*#__PURE__*/function () {
337
351
  }, {
338
352
  key: "submitPayment",
339
353
  value: function () {
340
- var _submitPayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
354
+ var _submitPayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(submitParams) {
341
355
  var _this3 = this;
342
356
  var startEventId, res, logParams, recordResult, _recordResult, _recordResult2, _recordResult3, _recordResult4, _recordResult5, _logParams;
343
357
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
@@ -369,7 +383,7 @@ var ElementController = /*#__PURE__*/function () {
369
383
  _context4.next = 11;
370
384
  return new Promise( /*#__PURE__*/function () {
371
385
  var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(resolve) {
372
- var that, recordResultCallback, params, processStep, _yield$_this3$onValid2, data, errorString, errorResult;
386
+ var that, recordResultCallback, params, processStep, _submitParams$handleA, _yield$_this3$onValid2, _data, errorString, errorResult;
373
387
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
374
388
  while (1) switch (_context3.prev = _context3.next) {
375
389
  case 0:
@@ -422,7 +436,7 @@ var ElementController = /*#__PURE__*/function () {
422
436
  }
423
437
  }, _callee2);
424
438
  }));
425
- return function processStep(_x2, _x3) {
439
+ return function processStep(_x3, _x4) {
426
440
  return _ref4.apply(this, arguments);
427
441
  };
428
442
  }(); // 按顺序处理步骤
@@ -449,13 +463,16 @@ var ElementController = /*#__PURE__*/function () {
449
463
  break;
450
464
  }
451
465
  _context3.next = 17;
452
- return _this3.onValidateAndSubmitPay(_this3.elementProcessors[ElementType.payment].eventCenter, ElementPaymentMethod.PAYMENT_ELEMENT, params);
466
+ return _this3.onValidateAndSubmitPay(_this3.elementProcessors[ElementType.payment].eventCenter, ElementPaymentMethod.PAYMENT_ELEMENT, _objectSpread(_objectSpread({}, params), {}, {
467
+ handleActions: (_submitParams$handleA = submitParams === null || submitParams === void 0 ? void 0 : submitParams.handleActions) !== null && _submitParams$handleA !== void 0 ? _submitParams$handleA : true,
468
+ shipping: submitParams === null || submitParams === void 0 ? void 0 : submitParams.shippingInfo
469
+ }));
453
470
  case 17:
454
471
  _yield$_this3$onValid2 = _context3.sent;
455
- data = _yield$_this3$onValid2.data;
472
+ _data = _yield$_this3$onValid2.data;
456
473
  // TODO 先快速修复类型, 这里结构和标准返回不一致 @马杰
457
474
  // TODO checkout 返回的错误未包含 status 和 message @马杰 @薛浩
458
- recordResult = data;
475
+ recordResult = _data;
459
476
  recordResultCallback(recordResult);
460
477
  case 21:
461
478
  _context3.next = 30;
@@ -484,7 +501,7 @@ var ElementController = /*#__PURE__*/function () {
484
501
  }
485
502
  }, _callee3, null, [[2, 23]]);
486
503
  }));
487
- return function (_x) {
504
+ return function (_x2) {
488
505
  return _ref3.apply(this, arguments);
489
506
  };
490
507
  }());
@@ -509,7 +526,7 @@ var ElementController = /*#__PURE__*/function () {
509
526
  }
510
527
  }, _callee4, this, [[8,, 12, 17]]);
511
528
  }));
512
- function submitPayment() {
529
+ function submitPayment(_x) {
513
530
  return _submitPayment.apply(this, arguments);
514
531
  }
515
532
  return submitPayment;
@@ -617,7 +634,10 @@ var ElementController = /*#__PURE__*/function () {
617
634
  return _context5.abrupt("return");
618
635
  case 7:
619
636
  _context5.next = 9;
620
- return Promise.all([containerService.createWebLaunchPromise(), this.elementProcessors[type].obtainData()]);
637
+ return Promise.all([containerService.createWebLaunchPromise(),
638
+ // 监听 onLaunch 事件
639
+ this.elementProcessors[type].obtainData() // 请求 sdkAction.query 的数据,connect 还会请求 account.query
640
+ ]);
621
641
  case 9:
622
642
  _yield$Promise$all = _context5.sent;
623
643
  _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
@@ -626,12 +646,15 @@ var ElementController = /*#__PURE__*/function () {
626
646
  this.serviceMap.Log.logInfo({
627
647
  title: 'sdk_event_webAppOnLaunch'
628
648
  });
649
+ // 应用页面加载完成且接口请求完成,状态设置为 READY
629
650
  containerService === null || containerService === void 0 || containerService.switchContainerStatus(IContainerStatus.READY);
651
+ // 处理接口数据异常情况,直接回调,结束流程
630
652
  errorResult = this.getErrorFromResponse(obtainDataResult);
631
653
  if (errorResult) {
632
- // 仅结束resove,传出回调码
654
+ // 仅结束resolve,传出回调码
633
655
  readyCallback(errorResult);
634
656
  }
657
+ // 页面加载和数据状态 READY 后,SDK 向应用层发送 renderComponent 事件,传递应用层渲染必须的数据
635
658
  if (this.areAllContainersReady()) {
636
659
  this.elementContainerService.getContainerServices().forEach(function (_, key) {
637
660
  _this5.sendReady(key, options);
@@ -654,7 +677,7 @@ var ElementController = /*#__PURE__*/function () {
654
677
  }
655
678
  }, _callee5, this, [[1, 20]]);
656
679
  }));
657
- function sendRequestAndWaitWebLaunch(_x4, _x5) {
680
+ function sendRequestAndWaitWebLaunch(_x5, _x6) {
658
681
  return _sendRequestAndWaitWebLaunch.apply(this, arguments);
659
682
  }
660
683
  return sendRequestAndWaitWebLaunch;
@@ -787,7 +810,7 @@ var ElementController = /*#__PURE__*/function () {
787
810
  }
788
811
  }, _callee6);
789
812
  }));
790
- return function (_x7) {
813
+ return function (_x8) {
791
814
  return _ref5.apply(this, arguments);
792
815
  };
793
816
  }()));
@@ -797,7 +820,7 @@ var ElementController = /*#__PURE__*/function () {
797
820
  }
798
821
  }, _callee7);
799
822
  }));
800
- function updatePayment(_x6) {
823
+ function updatePayment(_x7) {
801
824
  return _updatePayment.apply(this, arguments);
802
825
  }
803
826
  return updatePayment;
@@ -834,6 +857,30 @@ var ElementController = /*#__PURE__*/function () {
834
857
  (_this$onStatusChangeC = this.onStatusChangeCallback) === null || _this$onStatusChangeC === void 0 || _this$onStatusChangeC.call(this, "\u72B6\u6001\u7531 ".concat(_status, " \u53D8\u66F4\u4E3A ").concat(status));
835
858
  this.elementContainer.setStatus(status);
836
859
  }
860
+ }, {
861
+ key: "on",
862
+ value: function on(event, callback) {
863
+ if (!this.isEventAllowed(event)) {
864
+ return console.error("Event \"".concat(event, "\" is not allowed."));
865
+ }
866
+ this.serviceMap.EventCenter.listen(event, function (data) {
867
+ callback === null || callback === void 0 || callback(data);
868
+ });
869
+ }
870
+ }, {
871
+ key: "isEventAllowed",
872
+ value: function isEventAllowed(event) {
873
+ var _safeParse, _this$elementContaine;
874
+ // 获取当前场景
875
+ var isExpressCheckout = (_safeParse = safeParse((_this$elementContaine = this.elementContainer.getPaymentContext()) === null || _this$elementContaine === void 0 || (_this$elementContaine = _this$elementContaine.paymentSessionObj) === null || _this$elementContaine === void 0 ? void 0 : _this$elementContaine.extendInfo)) === null || _safeParse === void 0 ? void 0 : _safeParse.expressCheckout;
876
+ var productScene = isExpressCheckout ? ProductScene.EXPRESS_CHECKOUT : ProductScene.ELEMENT_PAYMENT;
877
+ // 查找对应的产品场景
878
+ var scenario = productEventScenarios.find(function (s) {
879
+ return s.eventName === productScene;
880
+ });
881
+ // 检查场景存在且事件名称在支持的事件列表中
882
+ return scenario !== undefined && scenario.supportedEvents.includes(event);
883
+ }
837
884
  }]);
838
885
  return ElementController;
839
886
  }();
@@ -88,7 +88,9 @@ var PaymentProcessor = /*#__PURE__*/function (_BaseElementProcessor) {
88
88
  sessionResult: paymentContext === null || paymentContext === void 0 ? void 0 : paymentContext.paymentSessionObj,
89
89
  notRedirectAfterComplete: (extraParam === null || extraParam === void 0 ? void 0 : extraParam.notRedirectAfterComplete) === true,
90
90
  merchantAppointParam: extraParam === null || extraParam === void 0 ? void 0 : extraParam.merchantAppointParam,
91
- originOneAccountQueryResult: extraParam === null || extraParam === void 0 ? void 0 : extraParam.originOneAccountQueryResult
91
+ originOneAccountQueryResult: extraParam === null || extraParam === void 0 ? void 0 : extraParam.originOneAccountQueryResult,
92
+ // TODO: 传递商户页面的domain
93
+ doMain: window.location.hostname
92
94
  }
93
95
  });
94
96
  }
@@ -1,4 +1,4 @@
1
- import { IElementOptions, PaymentMountOptions } from './type';
1
+ import { EventDataMap, EVENTNAME, IElementOptions, PaymentMountOptions, SubmitFuncParams } from './type';
2
2
  export declare class ElementComponent {
3
3
  private options;
4
4
  private controller;
@@ -8,6 +8,7 @@ export declare class ElementComponent {
8
8
  validateFields(): Promise<{
9
9
  isValid: boolean;
10
10
  }>;
11
- submitPayment(): Promise<import("./type").IPaymentApiResponse>;
11
+ submitPayment(params: SubmitFuncParams): Promise<import("./type").IPaymentApiResponse>;
12
12
  destroy(): void;
13
+ on<T extends EVENTNAME>(event: T, callback: (data: EventDataMap[T]) => void): void;
13
14
  }
@@ -62,14 +62,19 @@ export var ElementComponent = /*#__PURE__*/function () {
62
62
  }
63
63
  }, {
64
64
  key: "submitPayment",
65
- value: function submitPayment() {
66
- return this.controller.submitPayment();
65
+ value: function submitPayment(params) {
66
+ return this.controller.submitPayment(params);
67
67
  }
68
68
  }, {
69
69
  key: "destroy",
70
70
  value: function destroy() {
71
71
  this.controller.destroy();
72
72
  }
73
+ }, {
74
+ key: "on",
75
+ value: function on(event, callback) {
76
+ this.controller.on(event, callback);
77
+ }
73
78
  }]);
74
79
  return ElementComponent;
75
80
  }();
@@ -179,10 +179,15 @@ export interface PaymentMountOptions extends BaseMountOptions {
179
179
  'radius-component': string;
180
180
  'radius-button': string;
181
181
  'wrapper-padding': string;
182
+ 'stroke-default': string;
183
+ 'stroke-active': string;
182
184
  }>>;
183
185
  card?: {
184
186
  showBrandIcon?: boolean;
185
187
  };
188
+ accordion?: {
189
+ showRadio?: boolean;
190
+ };
186
191
  };
187
192
  notRedirectAfterComplete?: boolean;
188
193
  merchantAppointParam?: IMerchantAppointParam;
@@ -238,6 +243,23 @@ export interface PaymentSubmitData {
238
243
  paymentMethodId?: string;
239
244
  };
240
245
  }
246
+ export interface ShippingInfo {
247
+ shippingName: {
248
+ firstName: string;
249
+ lastName: string;
250
+ middleName?: string;
251
+ fullName?: string;
252
+ };
253
+ shippingPhoneNo: string;
254
+ shippingAddress: {
255
+ region: string;
256
+ address1: string;
257
+ address2: string;
258
+ city?: string;
259
+ state?: string;
260
+ zipCode: string;
261
+ };
262
+ }
241
263
  export interface AddressSubmitData {
242
264
  shippingName: {
243
265
  firstName: string;
@@ -261,6 +283,10 @@ export interface AddressSubmitData {
261
283
  shippingId: string;
262
284
  actionFlag?: 'I' | 'U' | 'D';
263
285
  }
286
+ export interface SubmitFuncParams {
287
+ handleActions?: boolean;
288
+ shippingInfo?: ShippingInfo;
289
+ }
264
290
  export interface SubmitServiceParams extends PaymentSubmitData {
265
291
  accountInfo: AuthSubmitData['accountInfo'];
266
292
  shipping?: AddressSubmitData;
@@ -413,6 +439,14 @@ export interface IToastOptions {
413
439
  icon?: 'SUCCESS' | 'FAIL';
414
440
  spin?: boolean;
415
441
  }
442
+ interface IPaymentSession {
443
+ nextAction: INextAction;
444
+ }
445
+ interface INextAction {
446
+ normalUrl: string;
447
+ applinkUrl?: string;
448
+ schemeUrl?: string;
449
+ }
416
450
  export interface ICommonApiResponse {
417
451
  error?: {
418
452
  code: string;
@@ -423,8 +457,9 @@ export interface ICommonApiResponse {
423
457
  };
424
458
  }
425
459
  export interface IPaymentApiResponse extends ICommonApiResponse {
426
- status: keyof typeof PaymentStatus;
460
+ status: keyof typeof PaymentStatus | '';
427
461
  userCanceled3D?: boolean;
462
+ session?: IPaymentSession;
428
463
  }
429
464
  export declare class InvalidElementConfigError extends Error {
430
465
  errors: Array<{
@@ -443,4 +478,30 @@ export declare enum EXPOSURE_API_EVENT {
443
478
  VALIDATAFIELDS = "validateFields",
444
479
  UPDATEPAYMENT = "updatePayment"
445
480
  }
481
+ export declare enum EVENTNAME {
482
+ PAYMENTMETHODCHANGED = "paymentMethodChanged",
483
+ VALUESCHANGED = "valuesChanged"
484
+ }
485
+ interface PaymentMethodChangedData {
486
+ type: string;
487
+ name: string;
488
+ }
489
+ interface ValuesChangedData {
490
+ region: string;
491
+ state: string;
492
+ city: string;
493
+ address1: string;
494
+ address2: string;
495
+ zipCode: string;
496
+ phoneNo: string;
497
+ name: {
498
+ firstName: string;
499
+ lastName: string;
500
+ middleName: string;
501
+ };
502
+ }
503
+ export interface EventDataMap {
504
+ [EVENTNAME.PAYMENTMETHODCHANGED]: PaymentMethodChangedData;
505
+ [EVENTNAME.VALUESCHANGED]: ValuesChangedData;
506
+ }
446
507
  export {};
@@ -147,4 +147,11 @@ export var EXPOSURE_API_EVENT = /*#__PURE__*/function (EXPOSURE_API_EVENT) {
147
147
  EXPOSURE_API_EVENT["VALIDATAFIELDS"] = "validateFields";
148
148
  EXPOSURE_API_EVENT["UPDATEPAYMENT"] = "updatePayment";
149
149
  return EXPOSURE_API_EVENT;
150
- }({});
150
+ }({});
151
+ export var EVENTNAME = /*#__PURE__*/function (EVENTNAME) {
152
+ EVENTNAME["PAYMENTMETHODCHANGED"] = "paymentMethodChanged";
153
+ EVENTNAME["VALUESCHANGED"] = "valuesChanged";
154
+ return EVENTNAME;
155
+ }({});
156
+
157
+ // 支付方式改变的回调函数的数据结构
@@ -83,3 +83,4 @@ export declare const isElementPC: () => boolean;
83
83
  */
84
84
  export declare const isLoadErrorPage: (params: CashierSdkActionQueryResult) => boolean;
85
85
  export declare const safeStringify: (payload: any, defaultValue?: string) => string;
86
+ export declare const safeParse: (payload: any, defaultValue?: Record<string, any>) => Record<string, any>;
@@ -535,4 +535,14 @@ export var safeStringify = function safeStringify(payload) {
535
535
  console.error('JSON.stringify failed:', e);
536
536
  return defaultValue;
537
537
  }
538
+ };
539
+ export var safeParse = function safeParse(payload) {
540
+ var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
541
+ if (!payload) return defaultValue;
542
+ try {
543
+ return JSON.parse(payload) || defaultValue;
544
+ } catch (e) {
545
+ console.error('JSON.parse failed:', e);
546
+ return defaultValue;
547
+ }
538
548
  };
@@ -1,5 +1,5 @@
1
- import { PaymentContext, SDKMetaData, Service } from '../../index';
2
1
  import { IoptionsParams } from '../../../types';
2
+ import { PaymentContext, SDKMetaData, Service } from '../../index';
3
3
  import { LogExtra, LogMetaData, LogPayload } from './types';
4
4
  /**
5
5
  * @author 谦彧 <zhangmian.zm@alipay.com>
@@ -8,10 +8,10 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
8
8
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
9
9
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
10
10
  import { EnvironmentEnum } from "../../../types";
11
- import { LogComplianceProcessor } from "./processor";
12
11
  import { isPC } from "../../../util";
13
- import { getStorageString, setStorageString } from "../../../util/storage";
14
12
  import { SPM_MAP } from "../../../util/spm-map";
13
+ import { getStorageString, setStorageString } from "../../../util/storage";
14
+ import { LogComplianceProcessor } from "./processor";
15
15
 
16
16
  /**
17
17
  * @author 谦彧 <zhangmian.zm@alipay.com>
@@ -185,14 +185,14 @@ export var LogService = /*#__PURE__*/function () {
185
185
  value: function loadScript(url, callback) {
186
186
  var _this3 = this;
187
187
  /*
188
- * 如果宿主环境存在AMD加载器,通过直接创建script标签的方式加载会造成宿主环境报错:
189
- * Message: Mismatched anonymous define() module
190
- * 原因是直接通过script标签加载的模块如果没有定义模块名,会被AMD加载器认为是匿名模块,
191
- * 而宿主环境中已经存在匿名模块,导致报错。
192
- *
193
- * TODO: 所有通过window.iTracker调用的方法都需要判断
194
- * 是否是AMD环境,如果是,需要通过require加载获取iTracker实例
195
- * */
188
+ * 如果宿主环境存在AMD加载器,通过直接创建script标签的方式加载会造成宿主环境报错:
189
+ * Message: Mismatched anonymous define() module
190
+ * 原因是直接通过script标签加载的模块如果没有定义模块名,会被AMD加载器认为是匿名模块,
191
+ * 而宿主环境中已经存在匿名模块,导致报错。
192
+ *
193
+ * TODO: 所有通过window.iTracker调用的方法都需要判断
194
+ * 是否是AMD环境,如果是,需要通过require加载获取iTracker实例
195
+ * */
196
196
  if (typeof window.define === 'function' && window.define.amd && typeof window.require === 'function') {
197
197
  var moduleId = 'antom_iTracker';
198
198
  try {
@@ -227,7 +227,12 @@ export var LogService = /*#__PURE__*/function () {
227
227
  script.onerror = function () {
228
228
  console.error("unable to load Antom script: ".concat(url));
229
229
  };
230
- document.body.appendChild(script);
230
+ // CDN 方式接入 sdk,执行时机可能在 body 创建之前
231
+ if (document.body) {
232
+ document.body.appendChild(script);
233
+ } else if (document.head) {
234
+ document.head.appendChild(script);
235
+ }
231
236
  }
232
237
  }, {
233
238
  key: "initTracker",
@@ -193,7 +193,9 @@ export var ApplePaySdk = /*#__PURE__*/function () {
193
193
  _context2.prev = 0;
194
194
  requestParams = {
195
195
  validateUrl: event === null || event === void 0 ? void 0 : event.validationURL,
196
- paymentSessionData: _this.paymentSessionData
196
+ paymentSessionData: _this.paymentSessionData,
197
+ // TODO: 新增appplay入参
198
+ merchantDomain: window.location.hostname
197
199
  };
198
200
  _context2.t0 = getApplePayPaymentSession;
199
201
  _context2.t1 = _this.paymentSessionData;
@@ -395,7 +397,7 @@ export var ApplePaySdk = /*#__PURE__*/function () {
395
397
  key: "initApplePaySession",
396
398
  value: function () {
397
399
  var _initApplePaySession = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
398
- var _this$logger7, _this$parseData3, _this$logger6, _this$parseData$payme2, recurringInfo, version, _this$logger8;
400
+ var _this$logger7, _this$parseData3, _this$logger6, _ref4, recurringInfo, version, _this$logger8;
399
401
  return _regeneratorRuntime().wrap(function _callee5$(_context5) {
400
402
  while (1) switch (_context5.prev = _context5.next) {
401
403
  case 0:
@@ -430,7 +432,7 @@ export var ApplePaySdk = /*#__PURE__*/function () {
430
432
  }
431
433
  throw new Error('Apple Pay not supported');
432
434
  case 12:
433
- _this$parseData$payme2 = (_this$parseData3 = this.parseData) === null || _this$parseData3 === void 0 ? void 0 : _this$parseData3.paymentSessionFactor, recurringInfo = _this$parseData$payme2.recurringInfo;
435
+ _ref4 = ((_this$parseData3 = this.parseData) === null || _this$parseData3 === void 0 ? void 0 : _this$parseData3.paymentSessionFactor) || {}, recurringInfo = _ref4.recurringInfo;
434
436
  version = recurringInfo ? APPLE_PAY_RECURRING_VERSION : APPLE_PAY_VERSION;
435
437
  if (this.isCanMakePayments(version)) {
436
438
  _context5.next = 16;
@@ -478,12 +480,12 @@ export var ApplePaySdk = /*#__PURE__*/function () {
478
480
  key: "initSessionParams",
479
481
  get: function get() {
480
482
  var _this$parseData4;
481
- var _ref4 = ((_this$parseData4 = this.parseData) === null || _this$parseData4 === void 0 ? void 0 : _this$parseData4.paymentSessionFactor) || {},
482
- merchantInfo = _ref4.merchantInfo,
483
- order = _ref4.order,
484
- paymentAmount = _ref4.paymentAmount,
485
- recurringInfo = _ref4.recurringInfo,
486
- extendInfo = _ref4.extendInfo;
483
+ var _ref5 = ((_this$parseData4 = this.parseData) === null || _this$parseData4 === void 0 ? void 0 : _this$parseData4.paymentSessionFactor) || {},
484
+ merchantInfo = _ref5.merchantInfo,
485
+ order = _ref5.order,
486
+ paymentAmount = _ref5.paymentAmount,
487
+ recurringInfo = _ref5.recurringInfo,
488
+ extendInfo = _ref5.extendInfo;
487
489
  var request = {
488
490
  countryCode: merchantInfo === null || merchantInfo === void 0 ? void 0 : merchantInfo.registeredCountry,
489
491
  currencyCode: paymentAmount === null || paymentAmount === void 0 ? void 0 : paymentAmount.currency,
@@ -529,10 +531,10 @@ export var ApplePaySdk = /*#__PURE__*/function () {
529
531
  key: "isRequiredParameters",
530
532
  get: function get() {
531
533
  var _this$parseData5;
532
- var _ref5 = ((_this$parseData5 = this.parseData) === null || _this$parseData5 === void 0 ? void 0 : _this$parseData5.paymentSessionFactor) || {},
533
- merchantInfo = _ref5.merchantInfo,
534
- extendInfo = _ref5.extendInfo,
535
- paymentAmount = _ref5.paymentAmount;
534
+ var _ref6 = ((_this$parseData5 = this.parseData) === null || _this$parseData5 === void 0 ? void 0 : _this$parseData5.paymentSessionFactor) || {},
535
+ merchantInfo = _ref6.merchantInfo,
536
+ extendInfo = _ref6.extendInfo,
537
+ paymentAmount = _ref6.paymentAmount;
536
538
  return !isEmpty(merchantInfo) && !isEmpty(paymentAmount) && !isEmpty(extendInfo === null || extendInfo === void 0 ? void 0 : extendInfo.supportedNetworks) && !isEmpty(extendInfo === null || extendInfo === void 0 ? void 0 : extendInfo.merchantCapabilities);
537
539
  }
538
540
  }, {
@@ -620,6 +620,7 @@ export interface CashierSdkActionQuerySessionResult extends IPaymentSessionMetaD
620
620
  export interface ApplePayPaymentSessionRequest {
621
621
  validateUrl: string;
622
622
  paymentSessionData: string;
623
+ merchantDomain?: string;
623
624
  }
624
625
  /**
625
626
  * Get App Pay Payment Session Result.