App crash when using apple pay
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 30/100
- Issue 类型
- 缺陷
- 描述清晰度
- 需要澄清
- 活跃度
- 停滞
- 技术栈
- ios, typescript
调研方向
Start with the Apple Pay authorization handler at node_modules/@nativescript/apple-pay/payment-authorization-view-controller-delegate.ios.js:43 and trace the request and paymentData shown in the issue. Reproduce the crash using the provided onApplePayTap flow, then verify that authorization no longer terminates the application and the payment sheet completes normally.
由索引模型根据 Issue 内容生成。
描述
Error:
***** Fatal JavaScript exception - application has been terminated. *****
NativeScript encountered a fatal error: Uncaught Error: The data couldn’t be read because it isn’t in the correct format.
at
PKPaymentAuthorizationViewControllerDelegateImpl.paymentAuthorizationViewControllerDidAuthorizePaymentHandler(file: src/webpack:/vois-mgov/node_modules/@nativescript/apple-pay/payment-authorization-view-controller-delegate.ios.js:43:0)
(CoreFoundation) *** Terminating app due to uncaught exception 'NativeScript encountered a fatal error: Uncaught Error: The data couldn’t be read because it isn’t in the correct format.
at
PKPaymentAuthorizationViewControllerDelegateImpl.paymentAuthorizationViewControllerDidAuthorizePaymentHandler(file: src/webpack:/vois-mgov/node_modules/@nativescript/apple-pay/payment-authorization-view-controller-delegate.ios.js:43:0)
', reason: '(null)'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff20406d44 __exceptionPreprocess + 242
1 libobjc.A.dylib 0x00007fff201a4a65 objc_exception_throw + 48
2 NativeScript 0x000000010610de7e __copy_helper_block_e8_32o + 0
3 libdispatch.dylib 0x00007fff201148e4 _dispatch_call_block_and_release + 12
4 libdispatch.dylib 0x00007fff20115b25 _dispatch_client_callout + 8
5 libdispatch.dylib 0x00007fff20123043 _dispatch_main_queue_drain + 1050
6 libdispatch.dylib 0x00007fff20122c1b _dispatch_main_queue_callback_4
code:
const MERCHANTID = '388333172821828292929';
const SomeIdentifierFromPaymentProvider = '89290109290129912088';
export const onApplePayTap = async (args?: any) => {
//try {
// just ensuring this runs only on iOS
if (isIOS) {
const applePayBtn = args.object as ApplePayBtn
// setup the event listeners for the delegate for apple pay for our button
applePayBtn.once(ApplePayEvents.DidAuthorizePaymentHandler, async (args: any) => {
console.log('in authorize handler')
console.log(ApplePayEvents.DidAuthorizePaymentHandler)
// this is where you do backend processing with your payment provider (Stripe, PayPal, etc.)
// this payload is just a sample, your payload to a provider will likely be different
// you can see here how to access the encrypted values from Apple Pay inside the `args.data.paymentData`
const payloadToBackend = {
transaction_type: 'purchase',
merchant_ref: args.data.paymentData.header.transactionId,
method: '3DS',
'3DS': {
merchantIdentifier: SomeIdentifierFromPaymentProvider,
data: args.data.paymentData.data,
signature: args.data.paymentData.signature,
version: args.data.paymentData.version,
header: args.data.paymentData.header
}
}
const result = true //await this.someHttpMethodToYourProviderBackend(payloadToBackend)
if (result) {
// need this to call when the payment is successful to close the payment sheet correctly on iOS
args.completion(ApplePayTransactionStatus.Success)
// now you can follow through with your user flow since the transaction has been successful with your provider
} else {
// payment failed on the backend, so show the FAILURE to close the Apple Pay sheet
args.completion(ApplePayTransactionStatus.Failure)
}
})
// these are the items your customer is paying for
const paymentItems = ([
{
amount: 20.5,
label: 'Balance',
type: ApplePayPaymentItemType.Final
}
] as unknown) as ApplePayItems[]
const request = {
paymentItems,
merchantId: MERCHANTID // the merchant ID for this app
merchantCapabilities: ApplePayMerchantCapability.ThreeDS,
countryCode: 'US',
currencyCode: 'USD',
shippingContactFields: [ApplePayContactFields.Name, ApplePayContactFields.PostalAddress],
billingContactFields: [ApplePayContactFields.Name, ApplePayContactFields.PostalAddress],
supportedNetworks: [
ApplePayNetworks.Amex,
ApplePayNetworks.Visa,
ApplePayNetworks.Discover,
ApplePayNetworks.MasterCard
]
} as ApplePayRequest
// `createPaymentRequest` will call into the Apple Pay SDK and present the user with the payment sheet for the configuration provided
await applePayBtn.createPaymentRequest(request).catch((err) => {
console.log('Apple Pay Error', err)
})
}
- 主要语言
- TypeScript
- 星标
- 35
- 派生
- 13
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
NativeScript/payments 的其他 Issue
-
com.android.billingclient:billing@@8.0.0 - com.google.android.gms.internal.play_billing.zzbg.zze未关闭
难度 4/5 3-5 天 新手友好度 28/100
NativeScript/payments#45 ·
-
难度 4/5 3-5 天 新手友好度 35/100
NativeScript/payments#43 · 2 个 reaction ·
-
难度 3/5 1-2 天 新手友好度 35/100
NativeScript/payments#39 ·
-
难度 5/5 一周以上 新手友好度 25/100
NativeScript/payments#36 · 2 条评论 ·
-
难度 3/5 1-2 天 新手友好度 35/100
NativeScript/payments#35 ·
查看 NativeScript/payments 的全部 Issue
相似的 Issue
-
难度 1/5 1 小时以内 新手友好度 88/100
-
bug needs triage
难度 2/5 1-3 小时 新手友好度 72/100
DSpace/dspace-angular#6511 ·
维护者通常 1 天内回复
-
area: frontend area:byok bug severity:low
难度 2/5 1-3 小时 新手友好度 65/100
维护者通常 1 天内回复
-
Phone app shows Unknown for a remote machine whose key changed可能已有人在做 @janicduplessis 今天认领。 未关闭area: mobile priority: P3 type: bug
难度 1/5 1 小时以内 新手友好度 78/100
appandflow/stim#5006 · 1 条评论 ·
维护者通常 1 天内回复
-
Area - Local to Cloud Bug
难度 2/5 1-3 小时 新手友好度 66/100
microsoft/vscode-mssql#23209 ·
维护者通常 1 天内回复