 查询交易支付订单与退款订单)
金融科技后端【免费下载链接】pay可能是我用过的最优雅的 Alipay/WeChat/Douyin/Unipay/江苏银行 的支付 SDK 扩展包了项目地址https://gitcode.com/gh_mirrors/pa/pay点击查看免费下载本篇技术指南围绕 yansongda/pay 扩展包中江苏银行Jsbe融支付提供商的订单查询能力展开完整讲解Pay::jsb()-query($order)方法签名、交易支付订单与退款订单两种查询场景的调用方式、必需配置参数以及底层插件调用链的实现原理。读完本文你将能独立完成江苏银行 e融支付订单状态的查询接入并理解查询请求的组装、加签、验签与响应校验全过程。方法签名与使用概览江苏银行 e融支付在 yansongda/pay 中内置了query快捷方法用于查询交易支付订单或退款订单的状态。其方法签名如下方法名参数返回值queryarray $orderCollection$order订单参数数组核心字段为outTradeNo商户订单号或退款单号返回值Yansongda\Supports\Collection类型的结果集合包含江苏银行返回的订单/退款查询结果字段。从源码看query方法定义在 src/Provider/Jsb.php 中方法内部会触发MethodCalled事件并通过__call将调用路由到\Yansongda\Pay\Shortcut\Jsb\QueryShortcut即查询场景对应的插件编排详见下文「底层插件调用链解析」。查询交易支付订单当需要查询一笔交易支付订单的支付状态时使用商户生成的交易订单号outTradeNo作为入参Pay::config($this-config); // 查询交易支付订单 $order [ outTradeNo 1514027114, ]; $result Pay::jsb()-query($order);执行成功后$result中即包含江苏银行返回的交易订单查询结果。需要注意的是outTradeNo必须与支付下单时传入的商户订单号一致否则无法命中订单江苏银行 e融支付的订单号由商户侧生成并自行管理建议保持唯一性与支付下单scan场景不同查询场景不需要notify_url等回调类参数。查询退款订单当需要查询一笔退款订单的退款处理状态时将退款单号填入outTradeNo字段即可参考官方退款接口约定退款单号通常带有RK-前缀Pay::config($this-config); // 查询退款单号查询退款订单 $order [ outTradeNo RK-1514027114, ]; $result Pay::jsb()-query($order);这里有一个容易被忽略的关键点交易支付订单与退款订单共用query方法和outTradeNo字段SDK 与江苏银行网关通过传入的单号语义普通商户单号 /RK-前缀退款单号自动区分查询目标。发起退款时对应使用Pay::jsb()-refund($order)见 src/Provider/Jsb.php退款成功后即可用该退款单号回查退款状态。配置参数说明原文档明确说明所有订单配置参数和官方无任何差别兼容所有功能所有参数请参考官方支付文档。这意味着订单级业务级参数完全沿用江苏银行 e融支付的官方字段定义SDK 不做二次裁剪。同时凡是客观性、可自动推导的参数如service、deviceNo、sign、signType、createData、createTime、msgId、version、charset等扩展包已在插件层自动组装调用方无需也不应手动传入。开发者只需要关注两类内容业务参数如outTradeNo查询/退款场景、totalFee、proInfo支付场景参考 web/docs/v3/jsb/pay.md商户配置参数在Pay::config()中完成江苏银行商户资质与证书配置。江苏银行提供商的配置类为 src/Config/JsbConfig.php其中validateRequired()校验了 4 个必填项缺一不可配置项是否必填说明partnerId必填商户号/合作商户标识publicKeyCode必填公钥编号mchSecretCertPath必填商户私钥证书路径用于请求加签jsbPublicCertPath必填江苏银行公钥证书路径用于响应验签svrCode选填服务代码由签约/环境决定notifyUrl选填异步通知地址支付下单时必需mode选填运行模式MODE_NORMAL或MODE_SANDBOXmode决定请求网关地址见 src/Provider/Jsb.php正式环境MODE_NORMALhttps://mybank.jsbchina.cn:577/eis/merchant/merchantServices.htm沙箱环境MODE_SANDBOXhttps://epaytest.jsbchina.cn:9999/eis/merchant/merchantServices.htm注意江苏银行无服务商platform模式supportedModes()仅允许MODE_NORMAL与MODE_SANDBOX见 src/Config/JsbConfig.php。相关配置校验逻辑可进一步参考 tests/Config/JsbConfigTest.php。底层插件调用链解析query快捷方法并非黑盒它由一条清晰的插件链协作完成「拼装公共参数 → 组装业务参数 → 加签 → 请求 → 验签 → 校验响应 → 解析」。QueryShortcut的插件编排见 src/Shortcut/Jsb/QueryShortcut.php[ StartPlugin::class, QueryPlugin::class, AddPayloadSignPlugin::class, AddRadarPlugin::class, VerifySignaturePlugin::class, ResponsePlugin::class, ParserPlugin::class, ]各环节职责如下1. StartPlugin注入公共参数src/Plugin/Jsb/StartPlugin.php 为所有 Jsb 请求注入公共参数createData当天日期Ymd、createTime当前时间His、bizDate、msgIdUUID v4、svrCode、partnerId、channelNo固定为m、publicKeyCode、versionv1.0.0、charsetutf-8并设置QueryPacker作为请求打包器。2. QueryPlugin区分查询业务src/Plugin/Jsb/Pay/Scan/QueryPlugin.php 是查询场景的业务插件向请求负载合并两个固定字段service固定为payCheck查询服务标识deviceNo固定为1234567890设备号SDK 自动处理。这与支付service为atPay见 src/Plugin/Jsb/Pay/Scan/PayPlugin.php和退款service为payRefund见 src/Plugin/Jsb/Pay/Scan/RefundPlugin.php形成区分也正是三种场景共用一套插件框架却能各司其职的原因。3. AddPayloadSignPluginRSA 加签src/Plugin/Jsb/AddPayloadSignPlugin.php 读取商户私钥证书mch_secret_cert_path对负载按 Key 排序后拼接字符串使用openssl_sign签名并 Base64 编码最终合并signType RSA与sign两个字段。若私钥证书缺失会抛出CONFIG_JSB_INVALID配置异常。4. AddRadarPlugin 与网络请求AddRadarPlugin负责解析出目标网关地址具体实现位于 src/Plugin/Jsb/AddRadarPlugin.php配合 src/Traits/JsbTrait.php 中getJsbUrl()的降级逻辑若雷达未解析出完整 URL则回落到当前mode对应的网关地址。5. VerifySignaturePlugin响应验签src/Plugin/Jsb/VerifySignaturePlugin.php 在收到响应后从响应体中提取签名数据并调用verifyJsbSign()src/Traits/JsbTrait.php使用江苏银行公钥证书jsb_public_cert_path通过openssl_verify校验签名签名缺失或校验失败均抛出InvalidSignException。该插件同时兼容江苏银行两种响应报文格式含-分隔符的原始报文与 query 拼接格式保证验签口径与官方一致。6. ResponsePlugin响应合法性校验src/Plugin/Jsb/ResponsePlugin.php 对响应做两道检查HTTP 状态码必须处于 2xx 区间否则抛出RESPONSE_CODE_WRONG异常业务返回码respCode必须为000000否则抛出RESPONSE_BUSINESS_CODE_WRONG异常异常信息中携带respCode与respMsg便于排查。这意味着query()正常返回时$result中的订单数据已经是通过网关签名校验与业务码校验的可靠数据无需调用方再做二次判断。7. ParserPlugin结果解析链尾的ParserPlugin将响应报文解析为Collection对象返回给调用方即方法签名中声明的返回值类型。返回值与后续处理建议query()返回的Collection可直接以数组下标方式读取查询结果中的字段如订单状态、交易金额、支付时间等字段名与江苏银行官方查询接口的返回字段一一对应。建议的后续处理流程先判断是否抛出异常InvalidSignException/InvalidResponseException/InvalidConfigException等异常即代表查询链路异常不应继续处理返回数据正常返回后根据业务需要轮询订单状态直至终态支付成功/退款成功或结合异步回调通知参考 web/docs/v3/jsb/callback.md与主动查询双通道对账江苏银行官方返回报文的格式说明可参考 web/docs/v3/jsb/response.md。适用范围与限制query是江苏银行提供商当前支持的三类核心操作之一scan扫码支付、query查询、refund退款详见 web/docs/v3/jsb/all.md江苏银行不支持cancel与close方法调用会抛出PARAMS_METHOD_NOT_SUPPORTED异常见 src/Provider/Jsb.php本扩展包对江苏银行的接入遵循「商户自行生成单号、SDK 自动处理客观参数」的约定因此outTradeNo的生成规则、退款单号前缀示例为RK-需与商户在江苏银行的签约口径保持一致。若需要更底层的自由调用能力如自定义插件组合可参考 web/docs/v3/jsb/all.md 中基于Pay::epay()-pay($allPlugins, $params)的插件直调示例对应插件的单元测试位于 tests/Plugin/Jsb/ 目录可作为理解各插件行为的补充材料。赞分享金融科技后端【免费下载链接】pay可能是我用过的最优雅的 Alipay/WeChat/Douyin/Unipay/江苏银行 的支付 SDK 扩展包了项目地址https://gitcode.com/gh_mirrors/pa/pay点击查看免费下载相关推荐把 9 大 AI 可观测性数据源接入 ExperientialBraintrust、LangSmith、LangFuse 摄入配方把 9 大 AI 可观测性数据源接入 ExperientialBraintrust、LangSmith、LangFuse 摄入配方 Experiential金融科技后端Navicat Mac版无限试用重置3种方法告别14天限制困扰Navicat Mac版无限试用重置3种方法告别14天限制困扰 还在为Navicat Premium的14天试用期到期而烦恼吗作为Mac用户必备的数据库管理金融科技后端EasyWeChat 4.x 微信支付订单操作全指南统一下单、订单查询与关闭订单EasyWeChat 4.x 微信支付订单操作全指南统一下单、订单查询与关闭订单 本指南围绕 EasyWeChat 4.x 的 Pay\Application后端即时通讯上一篇SopCastComponent音频处理全攻略AEC降噪与静音功能实践下一篇Windows DPI缩放终极指南快速设置多显示器显示比例创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考