跳转至内容
  • 汇付支付斗拱 C# 语言 SDK(bspay-csharp-sdk)

    开源技术 斗拱sdk csharp
    1
    0 赞同
    1 帖子
    180 浏览
    C# SDK 简介为了提高客户接入的便捷性,本系统提供 SDK 方式接入,使用本 SDK 将极大的简化开发者的工作,开发者将无需考虑通信、签名、验签等,只需要关注业务参数的输入。 SDK 项目结构说明BasePaySdk -- SDK核心包, 包含通信, 加解签, 接口参数对象等BasePayDemo -- 接口调用/参数赋值演示demolib -- 第三方引用SDK 接入说明以下两种方式任选其一直接在项目.csproj文件中引用(version 版本建议使用当前最新版) <ItemGroup> <PackageReference Include="DG-CSHARP-SDK" Version="x.x.x" /> </ItemGroup> 直接下载源码文件, 将BasePaySdk(SDK核心包)源码放入项目中SDK 使用说明接口命名直接根据接口URL来命名, 方便用户使用, 需要使用某接口时, 可直接使用接口中文名, 或接口URL(驼峰格式)进行搜索, 找到对应的request, demo等 配置初始化初始化为全局配置(多商户模式下, 可初始化多份, 参考demo中方法) InitMerConfig.init(); 组装请求参数为了接口使用更加方便, 我们将参数粗分为必填/非必填, 必填直接放在类中, 非必填放在extendInfos字段中 // 2.组装请求参数 V2MerchantBasicdataQueryRequest request = new V2MerchantBasicdataQueryRequest(); // 请求流水号 request.setReqSeqId(DateTime.Now.ToString("yyy-MM-dd HH.mm.ss.fff")); // 请求日期 request.setReqDate(DateTime.Now.ToString("yyyyMMdd")); // 汇付客户Id request.setHuifuId("6666000108854952"); // 设置非必填字段 Dictionary<string, object> extendInfoMap = getExtendInfos(); request.setExtendInfo(extendInfoMap); 发起API调用 // 3. 发起API调用 Dictionary<string, Object> result = null; result = BasePayClient.postRequest(request, null);
  • 0 赞同
    1 帖子
    246 浏览
    收银台 js sdkRepository:https://github.com/huifurepo/dg-js-sdk简介收银台 SDK,是基于支付托管模式,商户需开通支付托管功能。SDK 支持支付宝、微信、云闪付等多种支付方式。同时能根据需求高定制化的配置页面样式。封装收银台页面以及独立支付按钮等功能组件,通过 npm 包的形式分发和引入,帮助商户无感对接支付。降低商户接入支付的复杂性。改变原有支付托管跳转页面的接入方式,只提供支付功能的组件或按钮,允许商户侧自己定制实现收银台页面。实现页面高定制化的需求。开发者通过创建 'checkout' element 创建页面组件,然后将其渲染到页面上,同时传入 callback 方法用来接收处理事件结果。默认包含支付宝,微信,云闪付三种支付方式。根据环境展示支付方式,支付宝内只展示支付宝,微信内只展示微信,云闪付只展示云闪付。系统默认浏览器展示支付宝与微信。H5页面效果图PC页面效果图流程说明如果是 ATU App 内浏览器访问页面。如果是微信 app,跳转授权页面,获取 authcode 下单。发起支付。(微信内走公众号支付流程,结果页)如果是支付宝 app,下单 A_native 正扫 方式,拉起,支付。如果是云闪付,跳转授权页面,获取 authcode,点击支付按钮,下单,发起支付。如果是手机系统自带浏览器,选择微信支付,跳转微信托管小程序,完成支付。H5 页面轮询获取支付结果,返回支付结果给调用方。选择支付宝支付,跳转支付宝,下单 A_native 正扫 方式,拉起,支付。H5 页面轮询获取支付结果,返回支付结果给调用方。不支持云闪付。如果是PC 端浏览器,展示支付方式对应的支付二维码,用户扫描二维码完成支付。支付逻辑同手机端相同。接入说明服务端对接支付sdk是基于支付托管模式的,商户需开通支付托管功能,并且商户服务端需对接预下单接口,并提供前端接口给前端调用。 接口文档参见 预下单接口(注意:H5/PC页面预下单选择要根据环境判断,如果是ATU app内预下单pre_order_type = 1; 如果是在商户自己App,或者是系统默认浏览器里面是通过跳转小程序的方式完成支付的,所以如果在非ATU环境下,选择微信的话 pre_order_type=3,选支付宝 预下单 pre_order_type= 2)前端对接准备1,远程下载并安装sdknpm install dg-element 或下载sdk 包 1.0.02,引入sdkimport { HFPay } from 'dg-js-sdk'; 3,判断环境如渲染单一支付按钮组件,需先判断当前环境是否支持/** * @Description: 判断是否是微信浏览器 */ function isWXJS() { return navigator && navigator.userAgent.toLowerCase().indexOf('micromessenger') > 0; } /** * @Description: 判断是否是支付宝浏览器 */ function isAliPayJS() { return navigator && navigator.userAgent.toLowerCase().indexOf('alipayclient') > 0; } /** * @Description: 判断是否是银联浏览器 */ function isUnionPayJS() { return navigator && navigator.userAgent.toLowerCase().indexOf('unionpay') > 0; } /** * @Description: 判断是否是web环境 */ function isWebEnv() { return !/Android|webOS|iPhone|iPod|Phone|Mobile|OpenHarmony|BlackBerry/i.test(navigator.userAgent); } 4,定义预下单方法通过服务端接口获取预下单号,定义方法,供后续传入sdk,sdk 内会调用该方法获取预下单号。 以下为代码示例,具体调用以商户侧为准,但返回数据格式需与示例一致。需包含 pre_order_id、huifu_id、req_seq_id、req_dateconst createPreOrder = async function (selectedType) { // 增加loading 弹框 document.getElementById('loadingMask').classList.remove('hide'); const requestBody = { huifu_id: '6666000109133323', req_seq_id: Date.now().toString(), trans_amt: document.getElementById('element-amount').value, time_expire: '300', pre_order_type: '1', goods_desc: '无线鼠标静音无声笔记本台式电脑', hosting_data: { project_title: 'DEMO演示-无模板', project_id: 'PROJECTID2023092518673961', callback_url: 'http://paas.huifutest.com/checkout/demo/h5/jsSDKDemo.html', } }; if (isAliPayJS() || isWXJS() || isUnionPayJS() ) { requestBody.pre_order_type = '1'; } else if (selectedType === 'alipay') { requestBody.pre_order_type = '2'; requestBody.app_data = { app_schema: 'app_schema', } } else if (selectedType === 'wechatpay') { requestBody.pre_order_type = '3'; requestBody.miniapp_data = { need_scheme: 'Y', } } try { const response = await fetch(`https://checkoutbff.cloudpnr.com/v1/payment/pre/create`, { method: 'POST', headers: { 'Content-Type': 'application/json', // 建議加上 Header }, body: JSON.stringify(requestBody), }); const data = await response.json(); console.log('預下单结果:', data); // 隐藏loading 弹框 document.getElementById('loadingMask').classList.add('hide'); loadingFlag = false; return { pre_order_id: data.json_data.pre_order_id, req_seq_id: data.json_data.req_seq_id, huifu_id: data.json_data.huifu_id, req_date: data.json_data.req_date, }; } catch (err) { // 隐藏loading 弹框 $('#loadingMask').hide(); console.error('預下單失敗:', err); // 將錯誤向上拋出,讓調用者也能處理 throw err; } } 5,创建收银台 element,将组件渲染到页面上方法调用const { error, hfPay } = await HFPay(); hfPay.component(elementName,{ createPreOrder: createPreOrder, callback:callback }); 参数说明 |参数 | 类型 |说明 | |:--------|:------------|:-------------| | elementName | 字符串 | element 类型,checkout| | createPreOrder | function | 创建预下单的方法,需返回预下单号,具体参见调用示例| | callback | function | 回调方法,一般处理报错信息|调用示例:function callback(result) { console.log('callback 返回' + JSON.stringify(result)); // {"type":"payment_data","data":{"transStat":"1","huifuId":"6666000109133323","reqSeqId":"1753150933645","reqDate":"20250722","respDesc":"操作成功"}} } let element = hfPay.component('checkout', { createPreOrder: createPreOrder, callback:callback }); if (element) { element.mount('#element-container'); } else { console.log(`App: SDK 未能創建組件`); } 6,创建单支付按钮 element,将组件渲染到页面上除了创建整个checkout组件,还可以创建单支付按钮组件,支持支付宝、微信、云闪付三种支付方式方法调用const { error, hfPay } = await HFPay(); hfPay.component(type, { createPreOrder: createPreOrder, callback:callback }); 参数说明 |参数 | 类型 |说明 | |:--------|:------------|:-------------| | elementypetName | 字符串 | 单支付按钮类型,枚举值,alipay、wechatpay、unionpay| | createPreOrder | function | 创建预下单的方法,需返回预下单号,具体参见调用示例| | callback | function | 回调方法,一般处理报错信息|7,处理回调{ "type":"payment_data", "data":{ "transStat":"1", "huifuId":"6666000109133323", "reqSeqId":"1753150933645", "reqDate":"20250722", "respDesc":"操作成功" } } 常见问题Q1:如何给支付按钮定制样式A:可直接通过按钮class name 进行css 样式定制Q2:微信支付宝是怎么实现支付的A:如果在ATU 环境中,点击支付,页面会跳转到支付页面。如果在非ATU 环境中,点击支付,会拉起小程序进行后续支付操作。SDK版本记录版本日期版本说明v1.0.02025/8/28初始版本,支持微信支付宝云闪付支付
  • 汇付支付斗拱 Python 语言 SDK(dg-python-sdk)

    开源技术 斗拱sdk python
    1
    0 赞同
    1 帖子
    252 浏览
    DG Python SDKRepository:https://github.com/huifurepo/dg-python-sdkdougong sdk 工具类安装远程下载并安装:pip install dg-sdk简介为了提高客户接入的便捷性,本系统提供 SDK 方式介入,使用本 SDK 将极大的简化开发者的工作,开发者将无需考虑通信、签名、验签等,只需要关注业务参数的输入。使用方法初始化SDK未入网前,可使用以下测试商户参数进行开发测试import dg_sdk huifu_id = "6666000108854952" sys_id = "6666000108854952" product_id = "YYZY" private_key= "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxtfk3rjwdpBV81WBy5jIMcDLFdvHckhjGXkmWfaBn7euPRyetEhS4inpr7EvQ5KDUXNBPljI2NVhG/LEGZKvau1MW8j3t7dJ3gWafuVGsCiLJHU79sIRHf11nKOTykX5WxB/7MMwRnZsECuaZyCk7WPuSAlznqbDJdrZTzHhjQzMhjto1qD6+vc0OxyaBFlOY9piBtEfecsvD+6GfQ8exFqwzblJm9iZPYw02DaeUDLFO9Umn7i7gShlj/1Hh8nEM7YitpF/p26o+MC9LHWbIjgzjvNVhSRVmbvWys+3S11Zm/vux6Yzfk0H3fqrksAKSEkLEtEoYKS4wKjHdecztAgMBAAECggEACy1g4WmqCks5tsJM8K0d1L5x0w2qJK9js4ZWpop8Pk0ulbJqAm6ysvCyxnr0Qc0/eFvmFjtiKRqt1LksATTvwjAqB7Vww7hDlpSi+cTUKDfy/CdFwpsJlt2h6E0gKUmRYq+vO0NUcn8xMs3ktyNpxHvSRtqzMTbxEZrP2PFxWPzUKGNyk53FTlJ64YCoGQqWeGhA5LO6QLPHlAxIrvRf9B5dtXQr5XZXVqS9MwjtsRPvQPWiFXxlzvhJRcL/wXehcNextHzpMMgX/idB3HIpIl6XXLKiFUR4rBDJIMiQjQvS6zz2l1zpiJ0vWujVa3IY+PNefRA2ttg1DeC19GYa2QKBgQDh7AkJ7wut7p4qYAdcFEDVhFgP5mnSRyOBGWmClHYE4RIFplPiv4yO0fttAjFuCg4Zaxq49BuV3zshWOEIr72VK6wMa6Z+QbfXNr/1DT6nW+ktgXTw2G9Ts/nZiMrpcsbl7qvwChfJAPvEwnyP7Ckmd9t2WbQisuYZc+Vu8znO7wKBgQDJXskTiExEipQSOcVH5cX/ExVyj9MoLjmJhy3WTTDzGafgEoOPOfej2ZCgF6gCwugXJr+rtgdOpASk8WPACaCePdjdgQ2NVhSfV3op3TtvhgAPf3iI/zCVkZM4I1iZs6KjdHstLCKyAzCFBsowkPbfZBlFX4eO7Bk6XcIZ6x2h4wKBgQDcH64C5s4bb2beZOhm2Dj/kU54V4l93+CBFjCOkXaYdG+p35DWWspqEcCHSt68l8F7FLdZxEbodTPY3w+L9iejI4UkKPN1CzVD1U2dR4VnbY85zmwRiuCVzsM/KCCE61dOi4ktfbgFGhc1dEYHuROzLo8/tlFkiajW3eyLeSM3MwKBgATL3iw57d8gEeDRQXKx9WJa+QLOjDAD0dkFwEC/e+/+Z3I93qZVsiFT+E7n4VeXfuG2SZB0eH4WCApJuZ+EWzAJtxWnkkQQjdMxyTYgD99bKLs1xRA2S9j0K7aFmQGoNrJ//sMXrwfgbZJtk/lOKqMthjCR0u/DjeJHA22MnRsTAoGADXzJs/of0JExvQWwfdIUnSEPs/PgTrrJpo+CAdXnagYHF+InrmvIcNwx6ZzIs+9aGwUt0d/YsSpJkHMfAtTwZjB7sSw8Cg5DZ179Jy3YkKhFPvZv2ZCANa5J74HZNQUrUUL6O4FouZUiLwFlq8YuUPRtkAjYwyS/jwUbhJzqZhQ=" public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkMX8p3GyMw3gk6x72h20NOk3L9+Nn9mOVP6+YoBwCe7Zs4QmYrA/etFRZw2TQrSc51wgtCkJi1/x8Wl7maPL1uH2+77JFlPv7H/F4Lr2I2LXgnllg6PtwOSw/qvGYInVVB4kL85VQl0/8ObyxBUdJ43I0z/u8hJb2gwujSudOGizbeqQXAYrwcNy+e+cjodpPy9unpJjBfa4Wz2eVLLvUYYKZKdRn6pZR2cQsMBvL30K4cFlZqlJ9iP2hTG3gaiZJ9JrjTigwki0g9pbTDXiPACfuF1nOeObvLD22zBbgn1kwgfsqoG67z7g84u2jvfUFCzX1JRgd0xfNorTRkS2RQIDAQAB" dg_sdk.DGClient.mer_config = dg_sdk.MerConfig(private_key, public_key, sys_id, product_id, huifu_id) 参数说明:参数中文名public_key汇付公钥private_key商户私钥sys_id系统号product_id产品号huifu_id商户号接口调用以支付宝支付为例,根据接口文档说明,构建请求参数体required_params = { "trade_type": "A_NATIVE", "trans_amt": "1.00", "goods_desc": "goods_desc", } 调用接口url = "https://api.huifu.com/v2/trade/payment/jspay" result = dg_sdk.request_post(url, required_params) 其他调用方式除了通用的调用接口之外,SDK 还针对部分重要交易接口提供了一种更便捷的方法,将一些默认、非必须、无需特别关注的参数传递,以及数据脱敏、加密处理进行了封装。SDK 会自动生成必传参数:req_date 以及 req_seq_id,如不想使用SDK内部生成的值,直接传入即可。针对 huifu_id 以及 product_id,如不传,SDK会使用初始化时传入的值。使用方法如下所示:response = dg_sdk.ScanPayment.create(trade_type=trade_type, trans_amt=amount, goods_desc="goods_desc", **extra_info) print(response) 现支持模块功能列表如下聚合扫码 ScanPayment聚合正扫 - create订单查询 - query退款创建 - refund退款查询 - refund_query反扫 - micro_create关单 - close关单查询 - close_query支付托管预下单 - preorder_create线上交易 OnlinePayment线上交易查询 - query线上交易退款 - refund线上退款查询 - refund_query银联APP支付 - union_app_create网银支付页面版 - web_page手机网页支付 - wap_page网银付款银行账户查询 - payer_query网银支付银行列表查询 - bank_list快捷代扣对象 QuickAndHoldPay支付申请 - apply快捷支付确认 - confirm快捷/代扣绑卡申请 - bind_card快捷/代扣绑卡确认 - bind_card_confirm快捷代扣解绑 - un_bind快捷代扣短信重发(v1) - sms_code快捷页面版 - page代扣 - with_hold_pay线上交易查询 - query退款 - refund退款查询 - refund_query快捷支付用户注册 - customer_reg余额支付 AcctPayment余额支付 - create余额支付交易查询 - query余额支付退款 - refund余额支付退款查询 - refund_query余额查询 - balance_query代发 Surrogate代发 - create出金交易查询 - query取现对象 Settlement取现 - create取现查询 - query延时交易对象 Delaytrans延时交易确认 - confirm延时交易确认查询 - confirm_query延时交易退款 - confirm_refund交易确认批量信息查询(v1) - query_confirm_list查询交易分账明细 - split_list银行卡分期 Installment银行卡分期支付签约 - sign二段式分期支付申请 - payment_apply二段式分期支付确认 - payment_confirm银行卡分期退款 - refund银行卡分期查询 - query商户对象 Merchant企业类型商户进件 - create_enterprise个体户类型商户进件 - create_individual商户基本信息修改 - modify商户详细信息查询 - query_merch_info新增总部 - add_headquarters修改总部 - modify_headquarters总部商户绑定&解除 - bind_headquarters查询账户信息 - query_acct_info商户业务开通 - reg_busi_info商户业务开通修改 - modify_busi_info申请单状态查询 - query_apply_status商户图片资料上传(v1) - upload商户分账配置 - add_split_config商户分账配置查询 - query_split_config商户分期配置 - installment_config商户分期配置详情查询 - query_fenqi_config活动报名,支持微信 - reg_activity机构下属商户查询 - branch_mercust_query商户关系绑定 - branch_config机构列表查询 - branch_query分账用户对象 Member企业用户基本信息注册 - create_enterprise个人用户基本信息注册 - create_individual查询账户信息 - query_acct_info企业用户基本信息修改 - modify_enter_base_info个人用户基本信息修改 - modify_individual_base_info用户业务入驻 - reg_busi_info用户详情查询 - query_user_detail微信商户 WxMerchant微信商户配置 - config微信商户配置查询 - query_config微信实名认证 - realname微信实名认证状态查询 - query_realname_state证书登记 - add_cert_info微信特约商户进件申请 - apply_register_mer查询微信申请状态 - query_apply_reg修改微信结算帐号 - modify_settlement_info查询微信结算账户 - query_settlement_info微信关注配置 - subscribe_config微信关注配置查询 - query_subscribe_config支付宝商户 AliMerchant证书登记 - add_cert_info签约版-换取应用授权令牌 - exchange_app_auth_token签约版-申请当面付代签约 - apply_face2face_sign签约版-查询申请状态 - query_apply_order_status直付通-商户进件申请 - zft_apply_register_mer直付通-分账关系绑定&解绑 - zft_split_config直付通-分账关系查询 - query_zft_split_config云闪付商户 UniPayMerchant云闪付活动商户入驻 - apply_register_mer云闪付活动商户入驻状态查询 - query_apply_reg云闪付活动商户详细信息查询 - query_mer_base_info云闪付活动列表查询 - query_activity_list云闪付活动报名 - enlist_activity云闪付活动报名进度查询 - query_enlish_activity_status花呗分期配置对象 Huabei支付宝间连证书上传 - add_ali_cert_info创建花呗分期商家贴息方案 - create_pcredit_solution上架/下架花呗分期贴息 - modify_solution_status更新花呗分期商家贴息方案 - modify_pcredit_solution查询花呗分期贴息 - query_hb_solution花呗活动详情查询 - query_hb_activity终端设备 Terminal新增终端设备 - add注销终端设备 - cancel绑定终端查询 - query_list智能终端mis接入 Cloudmis智能终端接入 - device_infoPOS 机交易 POS银行卡交易查询 - query工具类 DGTools校验签名 - verify_sign校验 webhook 返回报文签名 - verify_webhook_sign使用公钥加密敏感信息 - encrypt_with_public_key详情参考SDK 接入说明
  • 0 赞同
    1 帖子
    254 浏览
    汇付支付斗拱 JAVA 语言 SDKRepository:https://github.com/huifurepo/bspay-java-sdk-parent欢迎使用 斗拱SDK for Java 。斗拱SDK for Java让您不用复杂编程即可访斗拱开放平台开放的各项能力,SDK可以自动帮您满足能力调用过程中所需的证书校验、加签、验签、发送HTTP请求等非功能性要求。 同时,斗拱dg-lightning-sdk提供聚合支付快速接入能力,能大大提升商户接入效率,可以参考dougong-java-lightning-sdk项目,主要包括交易创建、交易查询、交易关闭、交易退款、交易关闭查询、交易退款查询。环境要求斗拱SDK for Java 需要使用JKD 1.8或其以上版本。SDK接入准备提交商户材料完成进件及相关业务配置;登录控台获取/配置密钥,参见《商户密钥操作说明》;准备工作完成后,注意保存如下信息,后续将作为使用SDK的输入。商户的私钥、商户的公钥、汇付的公钥;安装依赖推荐通过Maven来管理项目依赖,您只需在项目的pom.xml文件中声明如下依赖 <dependency> <groupId>com.huifu.bspay.sdk</groupId> <artifactId>dg-java-sdk</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>com.huifu.dg.lightning.sdk</groupId> <artifactId>dg-lightning-sdk</artifactId> <version>1.0.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.70</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.2</version> </dependency> <!-- util --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.6</version> </dependency> <!-- okhttp --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.9.1</version> </dependency> 快速使用安装好依赖库保证运行环境没问题,可直接运行SDK demo,如调用商户详细信息查询正常返回说明运行环境配置成功;改商户配置信息(商户号、私钥),看下单是否成功,如能成功,说明商户配置成功,否则请检查商户控台配置;部署服务端服务:安装并部署服务端服务到您的服务器,前端应用调用SDK;前端应用对接:前端应用通过网络请求获取到应用服务端从SDK获取的支付信息。在前端页面或者APP内处理后,发起支付。以下这段代码示例向您展示了使用斗拱SDK for Java调用一个API的3个主要步骤:初始化商户参数,完成Client实例并初始化。系统初始化时只需做一次;创建API请求对象并设置Model参数。必填参数用set方法,非必填参数用addExtendInfo()方法设置;发起请求并处理响应或异常。 public static void main(String[] args) throws Exception { // 1. 设置商户参数(全局只需设置一次) doInit(OppsMerchantConfigDemo.getMerchantConfig()); // 2. 组装交易参数 TradePaymentMicropayRequest request = new TradePaymentMicropayRequest(); //请求日期 request.setReqDate(DateTools.getCurrentDateYYYYMMDD()); //请求流水号(保证唯一) request.setReqSeqId(SequenceTools.getReqSeqId32()); //交易金额(单位元) request.setTransAmt("0.01"); //条形码 request.setAuthCode("287606928207260511"); //商品描述 request.setGoodsDesc("测试商品"); //商户id request.setHuifuId("6666000103124174"); // 3.拓展参数 (可选) // 该笔交易的异步通知地址(http/https异步通知地址,必须以virgo://开头) request.addExtendInfo("notify_url", "virgo://http://www.baidu.com"); try { // 3. 发起API调用 Map<String, Object> response = doExecute(request); System.out.println("返回数据:" + JSONObject.toJSONString(response)); } catch (Exception e) { e.printStackTrace(); } } 异步消息说明接口如果有异步返回,请参考斗拱API文档异步消息说明文档SDK文档首页
  • 0 赞同
    1 帖子
    214 浏览
    Dougong Lightning SDK(Java)项目说明Repository:https://github.com/huifurepo/dg-lightning-sdk-java概述Dougong Lightning SDK 以 V4 插件的形式提供极简聚合支付能力,遵循“化繁为简、必参极简 + 可选灵活扩展”的设计风格,通过统一的调用入口与对象化入参模型降低集成成本。主要特性统一入口:通过 Factory 创建客户端,所有能力从一个入口发起。必参极简:主交易字段最小化,低频参数走扩展注入。可插拔扩展:optional(key, value) 注入场景参数,保持模型稳定。统一管道:入参归一、扩展合并、序列化、路由与调用一体化。多场景覆盖:下单、查询、关单、退款、退款查询。包结构简述factory:统一入口与客户端创建(Factory)。biz.client:业务客户端与链式扩展(CommonPayClient、BasePayClient)。biz.net:网关请求、签名与路由(BasePayRequest)。models:对象化入参/响应与领域对象(如 TradePaymentCreateRequest、分账对象)。utils:基础工具与配置(BasePay、DateTools、SequenceTools 等)。安装与引入在上层业务模块的 pom.xml 中引入:<dependency> <groupId>com.huifu.dg.lightning.sdk</groupId> <artifactId>dg-lightning-sdk</artifactId> <version>1.0.3</version> </dependency> 场景快速冒烟目标:零门槛验证“统一入口 + 极简扩展”是否接通。示例目录:查看 dougong-java-sdk项目的bspay-java-sdk-sample 项目操作步骤:在示例目录选择一个交易类型示例类(如 JSAPI/正扫/付款码)。设置主交易字段:req_date、req_seq_id、huifu_id、goods_desc、trans_amt、trade_type。注入通道扩展:将场景参数对象序列化为 JSON,使用 optional("method_expand", json) 注入;叠加收单能力:如需贴息/增值等,序列化为 JSON,使用 optional("tx_metadata", json) 注入。运行示例类的 main 或测试方法,观察返回的交易号/二维码/支付参数等核心结果。快速开始// 1. 初始化商户配置(建议从配置中心加载 MerConfig 后调用 BasePay.initWithMerConfig) BasePay.initWithMerConfig(merConfig); // 2. 组装必填入参(以聚合下单为例) TradePaymentCreateRequest req = new TradePaymentCreateRequest(); req.setReqDate(DateTools.getCurrentDateYYYYMMDD()); req.setReqSeqId(SequenceTools.getReqSeqId32()); req.setHuifuId("6666xxxxxxxxxxx"); req.setGoodsDesc("商品描述"); req.setTransAmt("0.01"); req.setTradeType("A_JSAPI"); // 3. 通过工厂获取客户端并发起调用 Map<String, Object> resp = Factory.Payment.Common() .optional("notify_url", "https://your.notify/url") .create(req); 可选参数扩展使用链式的 optional(key, value) 在客户端注入低频参数,这些参数将与请求体合并并覆盖同名字段。下单统一入口与扩展模型单一入口:所有支付下单统一通过 CommonPayClient#create 发起交易抽象:用 trade_type 标识具体支付场景;用 method_expand 承载该场景的专有参数,二者组合即为“交易对象”的扩展模型。收敛策略:新增或变更任意交易场景时,仅需定义场景参数对象 → 序列化为 JSON → 注入 method_expand,无需新增接口或客户端方法。推荐用法:保持必参极简,扩展参数一律通过 optional("method_expand", json) 注入;若无扩展,传 "{}" 即可。调用示例:req.setTradeType("T_JSAPI"); String json = JSON.toJSONString(wxData); Map<String, Object> resp = Factory.Payment.Common() .optional("method_expand", json) .create(req); 交易设计理念意向订单(主交易字段):用统一的主字段表达订单意向与基础要素,如日期、流水号、商户、金额、商品等,保持稳定不随渠道变化。通道信息(trade_type + method_expand):以 trade_type 选择支付通道/场景,以 method_expand 承载该通道的专有参数,二者组合定义“如何支付”。新增渠道能力只需新增专有参数对象并通过 method_expand 注入,无需改动统一入口。收单附加能力(tx_metadata):用于承载收单侧扩展能力,如贴息、分期、优惠分账、增值等,以 JSON 字符串注入即可。三层划分:将一次交易抽象为“意向订单(主字段)+ 通道(trade_type+method_expand)+ 收单附加能力(tx_metadata)”。该划分确保主交易模型稳定、通道能力可插拔、收单扩展可累加,统一入口下自然演进。统一请求管道(简述)入参归一:将请求对象规范化为键值对。扩展合并:合并扩展参数,客户端注入覆盖同名字段。特殊序列化:对象型特殊字段统一序列化为 JSON 字符串。路径解析与调用:将功能码解析为网关路径,完成 HTTP 调用并返回统一结果。常用接口示例支付下单:CommonPayClient#create(TradePaymentCreateRequest)支付查询:CommonPayClient#query关单:CommonPayClient#close退款:CommonPayClient#refund退款查询:CommonPayClient#refundQuery开箱即用与场景示例项目定位:本包为 V4 极简插件,示例与运行入口位于主 SDK 项目。示例目录:bspay-java-sdk-parent/bspay-java-sdk-sample/src/main/java/com/huifu/bspay/sdk/demo/v4使用方式:在主 SDK 示例目录中选择对应交易类型的示例类,按需修改基础入参与扩展参数(trade_type + method_expand / tx_metadata),直接运行。配置说明:主 SDK 通过配置中心加载环境与密钥信息;如运行异常,请在主 SDK 项目中调整环境与商户配置。配置说明通过 BasePay.initWithMerConfig(MerConfig) 或 BasePay.initWithMerConfigs(Map<String, MerConfig>) 完成多商户配置加载(dg-lightning-sdk/src/main/java/com/huifu/dg/lightning/utils/BasePay.java:57-71)。调用时使用默认商户配置,或在请求方法中指定 merchantKey 选择商户配置(BasePayRequest 的对应重载)。BasePay.prodMode 控制目标环境域名(生产/联测/内部),统一封装于 BasePayRequest 调用路径解析。异常与错误许可与版本版本:1.0.3许可证:Apache-2.0(详见根 POM)
  • 汇付支付斗拱 PHP 语言 SDK(bspay-php-sdk)

    开源技术 斗拱sdk php
    1
    0 赞同
    1 帖子
    197 浏览
    汇付支付斗拱 PHP 语言 SDK简介Repository:https://github.com/huifurepo/bspay-php-sdk为了提高客户接入的便捷性,本系统提供 SDK 方式介入,使用本 SDK 将极大的简化开发者的工作,开发者将无需考虑通信、签名、验签等,只需要关注业务参数的输入。下载地址SDK下载版本记录版本日期版本说明v1.0.02021/05/06初始版本v1.0.12021/08/23实现通用接口请求客户端演示demo,实现部分支付功能的封装v1.1.02021/10/12对接新版斗拱 API 接口v1.1.12021/11/02封装余额支付、取现、代发模块对象v1.1.22021/12/081. 封装快捷代扣、延时交易、商户管理模块;2. 优化 huifuid 方法参数,默认从配置文件中读取v1.1.32021/12/131. 优化 huifuid 方法参数2. 调整Demo 中 config.json 公私字段的命名3. 优化接口通讯安全处理v1.1.42021/12/211. 修复扫码接口地址问题2. 修复扫码支付模块支付类型对象数据格式化问题v1.1.52022/01/191. 封装微信、支付宝、云闪付商户管理模块对象;2. 封装分账用户管理模块对象v1.1.62022/04/211. 封装支付宝花呗分期模块对象;2. 封装终端报备模块对象;3. 封装银行卡分期模块对象;4. 封装交易取现、出金交易查询模块对象;5. 封装智能终端模块对象;6. 封装交易确认模块对象;7. 升级商户管理、快捷代扣、线上交易的部分接口为V2版本;v1.1.72022/05/051. 实现机构列表查询功能封装;2. 实现商户关系绑定功能封装;3. 实现机构下属商户查询功能封装;4. 升级商户图片上传接口为V2版本;v1.1.82022/05/121. 实现支付托管H5、PC、支付宝小程序、微信小程序预下单功能封装;2. 补充验签工具使用说明;v1.1.92022/07/141. 网银支付页面版、手机网页支付、快捷支付页面版接口只加签不验签;2. 商户图片上传接口免加解签;3. 优化预下单功能封装;v2.0.02022/09/161. 类名按资源路径生成;2. demo中字段说明更详细;版本要求PHP 版本 5.6 及以上SDK 包结构说明BsPaySdk 目录下内容为待添加到项目中的文件;BsPayDemo 目录下为示例项目,供接入时参考使用;使用方法1. 将 BsPaySdk 目录下文件内容整体复制到您的项目工程内2. 在您的项目创建 SDK 初始化的入口文件,完成如下配置:2.1 进行相关环境及调试参数的配置 # 设置是否调试模式,不配置默认关闭:false define("DEBUG", true); # 设置调试日志路径,不配置默认为SDK同级的log目录下 define("LOG", dirname(__FILE__)."/log"); # 设置生产模式,不配置默认生产模式:true,设置为 false 时调用联调测试环境 define("PROD_MODE", true); 2.2 完成 sdk 初始化 # 加载 SDK 初始化文件 require_once dirname(__FILE__). "/../BsPaySdk/init.php"; 2.3 完成系统参数的导入 # 从文件导入商户系统参数 BsPay::init(dirname(__FILE__). '/config/config_merch_default.json', false); # sdk也支持追加多套系统参数,并可以在调用接口时进行切换,适用于下辖多商户的系统接入 BsPay::init(dirname(__FILE__). '/config/config_merch_2.json', false, "merchantKey2"); BsPay::init(dirname(__FILE__). '/config/config_merch_3.json', false, "merchantKey3"); ... 2.4 以上内容,建议参考 SDK Demo 中 loader.php 文件内的代码写法3. SDK 调用方法(一):使用接口 request 实例调用,以商户业务开通接口为例3.1 导入前一步实现的 SDK 初始化文件# 导入初始化内容 require_once dirname(__FILE__) . "/loader.php"; require_once dirname(__FILE__). "/../BsPaySdk/request/V2MerchantBusiOpenRequest.php"; 3.2 根据接口文档说明,创建对应请求的参数数据体 # 请求必填参数 $request = new V2MerchantBusiOpenRequest(); // 请求流水号 $request->setReqSeqId(date("YmdHis").mt_rand()); // 请求日期 $request->setReqDate(date("Ymd")); // 汇付ID $request->setHuifuId("6666000104778898"); // 渠道商汇付ID $request->setUpperHuifuId("6666000003080000"); # 请求拓展参数 (可选) $extendInfoMap = getExtendInfos() ; $request->setExtendInfo($extendInfoMap); 3.3 调用接口# 创建请求Client对象,调用接口 $client = new BsPayClient(); $result = $client->postRequest($request); 3.4 处理返回结果# 成功/失败应答的处理 if (!$result || $result->isError()){ //失败处理 var_dump($result -> getErrorInfo()); } else { //成功处理 var_dump($result); } 3.5 以上内容,建议参考 SDK Demo 中 V2MerchantBusiOpenRequestDemo.php 文件内的代码写法4. SDK 调用方法(二):使用集中传参方式调用,以商户业务开通接口为例除基于接口 request 实例调用外,另提供一种集中传参方式,拓展适应不同需求;4.1 导入前一步实现的 SDK 初始化文件# 导入初始化内容 require_once dirname(__FILE__) . "/loader.php"; require_once dirname(__FILE__). "/../BsPaySdk/request/V2MerchantBusiOpenRequest.php"; 4.2 根据接口文档说明,创建对应请求的参数数据体 # 请求实例 $request = new V2MerchantBusiOpenRequest(); // 请求参数,不区分必填和可选,按照 api 文档 data 参数结构依次传入 $param = array( "funcCode" => $request->getFunctionCode(), "params" => array( "req_seq_id" => date("YmdHis").mt_rand(), "req_date" => date("Ymd"), "huifu_id" => "6666000104778898", "upper_huifu_id" => "6666000003080000", "balance_pay_config" => json_encode(array( "fee_rate" =>"2", "fee_fix_amt" =>"1", ),JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES), ), ); 4.3 调用接口# 创建请求Client对象,调用接口 $client = new BsPayClient(); $result = $client->postRequest($param); 4.4 处理返回结果# 成功/失败应答的处理 if (!$result || $result->isError()){ //失败处理 var_dump($result -> getErrorInfo()); } else { //成功处理 var_dump($result); } 5 验签工具(BsPayTools.php)校验签名 - verifySign_sort(此方法为返回报文签名验签,将返回data 按字母顺序排序后组成json 字符串,依据 RSA2 算法使用公钥进行验签示例:$data = array( 'bank_code' =>'10000', 'bank_message' =>'Success', 'hf_seq_id' =>'002900TOP2B220511142822P984ac132ff400000', 'huifu_id' =>'6666000108854952', 'qr_code' =>'https://qr.alipay.com/bax04465kcijedllqhuq004b', 'req_date' =>'20220511', 'req_seq_id' =>'202205111428211506200', 'resp_code' =>'00000100', 'resp_desc' =>'下单成功', 'trade_type' =>'A_NATIVE', 'trans_amt' =>'1.00', 'trans_stat' =>'P', ); $sign = "OUotiU75VW7SdEwLIZX3gAqSgZk8hCjE7r01WQr8mDdm23B+zd58r8HNWvE9BWV+mTwZ2iAOSuht9SOGM+spSYFANa3VIqMZzGim3y4aZmptQTTptNcclocsWyocn78efdAuTcGvf5dhUc6/Ue1oYV+BVhphYPmkKUKfxpEvBEvw/vlpsCu0I0Dx/k7kN6IaxY6mODypFmDtnEaZbkGaxbh8yxH1lJDn5/91YfD6vpK+sRJXiVXLzDK13BPAjQ3RAlFUxHJ8LPJbWQQpABQ94Gd1TTc/bfOluqUwJJbofC7WZiIOW6MKsa9gL5Y6lmbqFcMBKfvexJ0SlRFLWvSkQg=="; $merConfig = BsPay::getConfig(); $result = BsPayTools::verifySign_sort($sign,$data,$merConfig->rsa_huifu_public_key); 校验 webhook 返回报文签名 - verify_webhook_sign(此方法为异步回调验签方法,将返回 data 字符串与商户配置的key 组合后进行md5计算,返回的md5值与回调sign的比较结果示例:$data = array( 'bank_code' =>'10000', 'bank_message' =>'Success', 'hf_seq_id' =>'002900TOP2B220511142822P984ac132ff400000', 'huifu_id' =>'6666000108854952', 'qr_code' =>'https://qr.alipay.com/bax04465kcijedllqhuq004b', 'req_date' =>'20220511', 'req_seq_id' =>'202205111428211506200', 'resp_code' =>'00000100', 'resp_desc' =>'下单成功', 'trade_type' =>'A_NATIVE', 'trans_amt' =>'1.00', 'trans_stat' =>'P', ); $sign = 'dcc64089c44ea77cfde785de4cfa97ba'; $key = 'test_key'; $result = BsPayTools::verify_webhook_sign($sign,$data,$key);
  • 汇付支付斗拱 Go 语言 SDK(bspay-go-sdk)

    开源技术 斗拱sdk go
    1
    0 赞同
    1 帖子
    154 浏览
    汇付支付斗拱 Go 语言 SDK 简介Repository:https://github.com/huifurepo/bspay-go-sdk为了提高客户接入的便捷性,本系统提供 SDK 方式接入,使用本 SDK 将极大的简化开发者的工作,开发者将无需考虑通信、签名、验签等,只需要关注业务参数的输入。 SDK 项目结构说明BsPaySdk -- SDK核心包, 包含通信, 加解签, 接口参数对象等config -- 商户配置ut -- 接口调用/参数赋值演示demoSDK 接入说明以下两种方式任选其一直接在go.mod中引用(require github.com/huifurepo/bspay-go-sdk/BsPaySdk [version])直接下载源码文件, 将BsPaySdk(SDK核心包)源码放入项目中SDK 使用说明接口命名直接根据接口URL来命名, 方便用户使用, 需要使用某接口时, 可直接使用接口中文名, 或接口URL(驼峰格式)进行搜索, 找到对应的struct, demo等 配置初始化初始化为全局配置(多商户模式下, 可初始化多份)第一个参数true:生产环境, false:测试环境第二个参数商户公私钥等信息配置dgSDK, _ := BsPaySdk.NewBsPay(false, "./config/config.json") 组装请求参数为了接口使用更加方便, 我们将参数粗分为必填/非必填, 必填直接放在结构体内, 非必填放在结构体的map字段ExtendInfos中 dgReq := BsPaySdk.V2MerchantBasicdataQueryRequest{ // 请求流水号 ReqSeqId: tool.GetReqSeqId(), // 请求日期 ReqDate: tool.GetCurrentDate(), // 汇付客户Id HuifuId: "6666000108854952", } // 设置非必填字段 dgReq.ExtendInfos = getExtendInfos() 发起API调用resp, err := dgSDK.V2MerchantBasicdataQueryRequest(dgReq)