Braintree GraphQL:如何从Transaction中获取支付方式枚举值?
从Braintree Transaction对象提取支付方式枚举值的方法
Hey there! 既然你在用Braintree的GraphQL API和JS版Drop-In UI,刚好我对这块熟得很,直接给你捋清楚怎么从Transaction对象里拿到对应支付方式的枚举值——
首先先明确你提到的四种支付方式对应的Braintree官方枚举值:
- Credit Card:
credit_card - PayPal:
paypal_account - Apple Pay:
apple_pay_card - Google Pay:
google_pay_card
1. 通过GraphQL查询获取枚举值
当你通过Braintree GraphQL API查询交易记录时,只需要在查询字段中包含paymentMethodType,它会直接返回上述枚举值。举个查询示例:
query FetchTransaction($transactionId: ID!) { transaction(id: $transactionId) { id amount paymentMethodType # 这个字段就是你要的支付方式枚举 status } }
调用这个查询后,返回的transaction.paymentMethodType就是对应支付方式的枚举字符串,直接用它判断即可。
如果你需要同时获取支付方式的具体细节(比如信用卡后四位、PayPal邮箱),还可以结合接口内联片段和__typename来判断类型,不过paymentMethodType是最直接的方式:
query FetchTransactionWithDetails($transactionId: ID!) { transaction(id: $transactionId) { id paymentMethodType paymentMethod { __typename ... on CreditCard { last4 brand } ... on PayPalAccount { email } ... on ApplePayCard { last4 } ... on GooglePayCard { last4 } } } }
这里的__typename返回的是首字母大写的类型名(比如CreditCard),和paymentMethodType是一一对应的。
2. 在Drop-In UI的回调中提取
当你用JS版Drop-In完成支付请求后,requestPaymentMethod的回调里会返回包含交易信息的payload,其中就有paymentMethodType字段,直接提取即可:
braintree.dropin.create({ authorization: 'YOUR_CLIENT_AUTHORIZATION', container: '#dropin-container' }, (createErr, instance) => { document.getElementById('submit-payment').addEventListener('click', () => { instance.requestPaymentMethod((requestErr, payload) => { if (requestErr) { console.error('支付请求失败:', requestErr); return; } // 提取支付方式枚举值 const paymentType = payload.paymentMethodType; // 根据枚举值做后续逻辑 switch(paymentType) { case 'credit_card': console.log('用户用信用卡支付'); break; case 'paypal_account': console.log('用户用PayPal支付'); break; case 'apple_pay_card': console.log('用户用Apple Pay支付'); break; case 'google_pay_card': console.log('用户用Google Pay支付'); break; default: console.log('未知支付方式'); } // 这里可以把payload.nonce传给你的后端完成交易 }); }); });
小提示
不管是GraphQL查询结果还是Drop-In回调的payload,paymentMethodType的枚举值都是统一的,不用额外转换,直接判断字符串就行,非常省心。
内容的提问来源于stack exchange,提问作者hendra




