bluepayment-plugin / module-bluepayment-graphql
为Magento 2提供的BM支付GraphQL扩展。
Requires
- bluepayment-plugin/module-bluepayment: ^2.16.0
- magento/framework: ^103
- magento/module-checkout: ^100.4
- magento/module-config: ^101.0
- magento/module-payment: ^100.4
- magento/module-quote: ^101
- magento/module-quote-graph-ql: ^100.4
- magento/module-sales: ^103.0
- magento/module-store: ^101.0
Suggests
- magento/module-graph-ql: ^100
README
模块安装
通过composer执行命令
composer require bluepayment-plugin/module-bluepayment-graphql
激活
- 进入Magento主目录,执行以下命令
bin/magento module:enable BlueMedia_BluePaymentGraphQl --clear-static-content bin/magento setup:upgrade bin/magento setup:di:compile bin/magento cache:flush
- 完成。模块已激活。
技术细节
- 在可用的支付通道查询bluepaymentGateways()中是否直接包含BLIK、信用卡支付和快速转账银行列表?如果默认返回银行列表,是否可以获取到只包含“快速转账/PBL”的选项,并且可以在WebView中选择特定的银行?
将返回所有在特定服务中连接的通道。当然,您可以选择只连接快速转账/PBL。
具体来说,available_payment_methods首先返回所有标记为'单独支付方式'的方法。这意味着我们会收到例如Blue Media支付、BLIK、信用卡等。然后可以调用bluepaymentGateways – 这个查询将返回主支付方式(即未标记为'单独支付方式')下的所有通道,例如在Blue Media支付的情况下,会返回PBL/快速转账下的各个银行。
- 支付网关ID是否是固定的,并且是否可以在代码中安全地将其写入硬编码,例如在应用程序或后端?
支付网关ID不是固定的。每个ID都可能在将来发生变化,但这种变化很少发生。这种情况通常发生在银行合并或任何需要我们更改特定通道的变化时。
- PBL和快速转账有何不同?
PBL在银行系统中预先填充数据(客户只需确认支付),而快速转账要求客户复制收到的数据。这是这两种方法的唯一区别。每个转账都是在银行内部完成的。
- 何时可能遇到is_separated_method?
这意味着可以将通道作为单独的支付方式分开,例如将信用卡从其他方式中分离出来,或者显示客户最常使用的这些通道。
在哪里可以设置这些?在Magento面板?
是的,您可以直接在Magento 2面板中设置这些 - 在编辑特定通道时。您可以通过这种方式分离出例如Blue Media支付、BLIK、信用卡支付。这意味着信用卡可以被视为单独的支付方式,在选择Blue Media支付的主要支付方式时显示,或者在可用的支付通道选项中作为一项。
- 为什么在setPaymentMethodOnCart()变异中gateway_id是可选的?
该参数是可选的,因为我们可以通过指定它们的gateway_id来调用特定的通道。但这不是必需的 - 我们可以在用户被重定向到BlueMedia页面时显示所有可用的通道。
- redirecturl是否仅用于记录支付流程的结束,但它不等于支付的正/负/待定状态?获取当前支付状态的唯一选项是周期性地查询服务器吗?
RedirectUrl仅与支付后的返回页面相关 - 客户完成交易后将被重定向到的视图。当前交易状态通过ITN消息传递。
- 如何获取当前选中支付方式的名称,例如“Volkswagen Bank转账”?
请执行以下查询
query{ cart(cart_id: „..."){ id email selected_payment_method { title } } } Zapytanie zwraca nazwę kanału, np. "PG płatność testowa”.
- 通过传递bluemedia_509,我们有技术上的可能性不传递payment_method:{bluepayment:{back_url}}。我是否正确假设,无论如何都必须提供它?
如果未指定,则用户将被重定向到oplacasie-accept.bm.pl(或生产版本为oplasie.bm.pl)面板中设置的返回地址。
- 从哪里获取需要在使用setPaymentMethodOnCart突变时传递的当前back_url配置?它是在Blue Media面板中定义的吗?或者这个参数是独立于配置的,我们可以在这里传递任何URL吗?
可以传递以http://或https://开始的任何URL。
- available_payment_methods.code: bluepayment是固定的,还是有可能更改这个键?
键是固定的,将来也将保持不变。无法更改它。
- 通知服务器客户/商家支付状态的耗时是多长?
系统在收到来自支付渠道(始终涉及单一交易)的信息后立即传递关于交易状态变化的提醒。
- 查询bluepaymentOrder(hash: String!, order_number: String!): BluePaymentOrder!需要提供我们不知道也不在placeOrder突变或任何其他地方收到的hash。现在怎么办?
在这种情况下,hash被附加到back_url地址。例如,对于设置为https://pwa-studio-latest-accept.blue.pl/bluepayment的back_url,用户将被重定向到:https://pwa-studio-latest-accept.blue.pl/bluepayment?ServiceID=101636&OrderID=k8s_000000139&Hash=30df99b5c49c3568ee465943e3cdab3742aef804f12646df8de66c39c281ee0e
hash的计算公式为:sha256($id_serwisu|$orderId|$klucz_serwisu)
- 如何获取当前选择的支付渠道?
在available_payment_methods中添加了gateway_id。对于单独的支付方法,返回bluemedia通道ID,对于所有其他支付方法,返回null。
示例
query getPaymentInformation($cartId: String!) {
cart(cart_id: $cartId) {
id
selected_payment_method {
code
__typename
}
...AvailablePaymentMethodsFragment
__typename
}
}
fragment AvailablePaymentMethodsFragment on Cart {
id
available_payment_methods {
code
title
gateway_id
__typename
}
__typename
}
其中$value
是购物车(cart.prices.grand_total.value)的总价,而$currency
是购物车的当前货币(cart.prices.grand_total.currency)。您将收到一个包含对象的数组作为响应
gateway_id: ID! name: String! description: String sort_order: Int type: String logo_url: String! is_separated_method: Boolean!
- 是否可以传递格式为bluepayment_509的代码的支付渠道?
对于setPaymentMethodOnCart突变,已添加对格式为bluepayment_509
的代码的处理。如果以这种方式发送支付方法代码,则后端将将其“转换为”相应的bluepayment 509通道。
示例
query getBluePaymentAgreements($gatewayId: ID!, $currency: CurrencyEnum!, $locale: String!) { bluepaymentAgreements(gateway_id: $gatewayId, currency: $currency, locale: $locale) { regulation_id type url label_list { label_id label placement show_checkbox checkbox_required } } }
作为$locale
,我们以BCP-47格式(但用下划线代替连字符,例如pl_PL, en_US)提供用户语言。作为响应,我们获得给定支付渠道的同意列表。
在Magento侧的同意被缓存15分钟(针对特定支付渠道、货币和语言)。
开始支付
调用突变setPymentMethodOnCart
,传递扩展为
示例
mutation setPaymentMethodOnCart($cartId: String!, $backUrl: String!, $gatewayId: ID, $agreementsIds: String) { setPaymentMethodOnCart( input: { cart_id: $cartId payment_method: { code: "bluepayment_1899" bluepayment: { create_payment: true back_url: $backUrl, agreements_ids: $agreementsIds } } }) { cart { selected_payment_method { code title } } } }
如果create_payment
设置为True
,则在提交订单后,将在BlueMedia开始交易。然后获取给定订单的redirectUrl
并将用户重定向到该地址。
获取redirectUrl
调用查询redirectUrl
,例如
query getRedirectUrl($orderNumber: String!) { redirectUrl(order_number: $orderNumber) }
作为响应,您将收到一个包含用户应重定向到的地址的redirectUrl
。支付完成后,用户将被重定向到在back_url
参数中指定的地址。