首页 > 编程语言 >支付场景之微信小程序

支付场景之微信小程序

时间:2024-07-19 15:26:06浏览次数:23  
标签:异步 场景 商户 微信 程序 接口 之微信 支付 id

天下支付分久必合合久必分,而微信小程序支付的异军突起成为了互联网支付的半壁江山。可支付通道的门槛与分账功能的不完善逐渐影响着广大老板的信心。不过现在,小编将简单介绍我们产品的接入方式(有需求可以私信哦~)。

 1.产品介绍

 1.1简介

微信小程序:商户自行申请的微信小程序,进行商品信息和订单管理,在用户确认商户订单信息后调用微信支付完成下单购买的流程。

1.2应用场景

适用对象:开通了微信线上、线下小程序支付权限的商户;

我们支持:

  1. 小程序支付开通、小程序支付配置(小程序参数)、小程序支付(AT)、AT活动报名、手续费配置(内扣、外扣、实收、后收、线上、线下);
  2. 支持AT代金券、支持AT商家券。

 流程图:

2.进入前准备

2.1商务准备

1.选择接入模式

        商户选择对应模式并与我们完成签约,即可通过接口或控台方式完成商户入网。(记得私信哦~)具体流程:完成协议签署后,将准备好的入网材料提供给支付机构人员,由三方人员发起入网申请,待审核通过入网成功后,联系人将收到短信通知控台账号及密码。

2.商户进件入网

        API企业商户调用 企业商户基本信息入驻接口 、小微商户调用 个人商户基本信息入驻接口完成开户、绑卡、结算配置。

3.选择接入功能并准备相关材料

        微信支付:提供商户或服务商主体的小程序APPID。

2.2对接准备

第一步:密钥获取

联调之前需要先获取公私钥(记得私信哦~);

第二步:公共参数获取

登录商户控台后,可在开发设置-开发者信息中,获取sys_id,product_id参数信息;

第三步:业务开通及配置

步骤一:服务商功能及权限开通。服务商通过线下签约方式申请微信功能,支付机构人员在审核好服务商资料之后,为服务商开通相关支付功能,及费率配置。

步骤二:为商户开通功能及权限。服务商权限及费率配置完成后,服务商可在服务商控台为下属商户申请开通相关支付功能,或通过调用商户业务开通接口开通。具体流程请参考商户进件API文档。

3.开发指引

3.1对接规范

调用接口,均采取POST形式提交,数据格式统一为JSON格式(记得私信哦~);

3.2确认业务配置

3.2.1 微信侧准备:

商户在微信公众平台有账号而且有小程序,开发阶段可以使用体验版本进行测试,需要将小程序先上线,小程序上线需通过微信审核。

3.2.2 渠道侧准备:

商户微信小程序业务已开通、小程序appid已配置、小程序费率已配置;

查询方式

1)服务商控台:【商户信息】【查看】【商户变更】【业务信息】【基础支付】

2)商户控台:【我的信息】

3)通过微信配置查询接口来确认相关配置。

商户微信实名认证状态已完成,实名认证状态显示已授权。

查询方式

1)服务商控台:【商户信息】

 2)通过微信实名认证状态查询接口来确认相关配置。

3.3系统调用流程

3.3.1交易流程

接入步骤说明:

1.通过授权获取用户 open_id 

a.小程序端调用 wx.login(Object object)接口获取登录凭证(code)示例:

wx.login({
    success (res) {
        if (res.code) {
            //发起网络请求
            wx.request({
                url: 'https://test.com/onLogin',
                data: {
                code: res.code
                }
            })
        } else {
            console.log('登录失败!' + res.errMsg)
        }
    }
})

b. 商户服务端使用第一步获取的code 换取 open_id ,后台调用接口获取openID示例代码如下:

/*GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code*/

url = 'https://api.weixin.qq.com/sns/jscode2session'
params = {
        'appid': app_id,
        'secret': 'wx_secret',
        'js_code': wx_code,
        'grant_type': 'authorization_code',
}
resp = requests.get(url, params, timeout=15)
result_dict = json.loads(resp.text)
openid=result_dict.get('openid')

2.商户服务端使用open_id下单

调用聚合正扫接口下单拉起支付,需要传入前端调用获得的 open_id 获取微信返回支付 pay_info信息。

聚合正扫接口需关注以下字段:

参数中文名必填说明
trade_type交易类型YT_MINIAPP: 微信小程序
time_expire交易有效期N指定交易失效时间,不指定微信默认是2小时,超过有效时间的订单会默认被关闭
+wx_data微信拓展参数集合N通过前端调服微信获取的数据换取pay_info;
sub_appid子商户公众账号IDN微信小程序app_id
openid用户标识Y前端调用微信获取的用户在商户appid下的唯一标识;
sub_openid子商户用户标识N前端调用微信获取的用户在子商户appid下的唯一标识;
notify_url异步通知地址N交易异步通知地址,http或https开头

*其中wx_data中,如填写openid则无需填写sub_appid+sub_openid。如不填openid,则需填写sub_appid和sub_openid。

同步返回关注以下字段:

参数中文名说明
trans_stat交易状态同步通常返回“处理中”,交易终态以异步返回为准
resp_desc业务响应信息关注失败原因
bank_message通道返回描述关注通道返回的失败原因
pay_info支付信息这个字段后续调用微信需要用到的
hf_seq_id全局流水号系统生成全局流水号,后续可以用这个流水号查询交易

3.小程序端发起支付

小程序端使用聚合正扫返回的pay_info 调用wx.requestPayment(OBJECT)发起微信支付。

    wx.requestPayment(
    {
        'timeStamp': '',
        'nonceStr': '',
        'package': '',
        'signType': 'MD5',
        'paySign': '',
        'success':function(res){},
        'fail':function(res){},
        'complete':function(res){}
    })

4.交易终态获取

客户支付完成后汇付会将支付结果推送到客户异步地址,主要关注参数如下

参数中文名说明
settlement_amt结算金额用户实际支付金额。如有优惠该金额小于交易金额;
fee_amount手续费金额系统扣收的支付手续费金额
trans_stat交易状态交易的最终结果;S:成功、F:失败
out_trans_id用户账单上的交易订单号交易在微信侧的流水号
party_order_id用户账单上的商户订单号交易在微信侧生成的订单号
wx_user_id微信用户唯一标识码用户在微信侧的ID号
wx_response微信返回的响应报文Json格式
bank_message通道返回描述如交易失败可以关注一下通道返回的错误描述

如果长时间未收到异步结果可以调用扫码交易查询接口查询交易状态;

3.3.2退款流程

完整的交易流程还要包括退款。由于用户或者商户的原因需要退款时,商户可以通过本接口将支付款退还给用户,退款成功资金将原路返回。

关注以下请参:

参数中文名必填说明
org_req_date原交易请求日期Y用户发起支付的日期
org_req_seq_id原交易请求流水号C商户系统发给斗拱的指令流水号
org_hf_seq_id原交易全局流水号C支付机构生成的系统流水号
org_party_order_id原交易微信支付宝的商户单号C该笔交易在微信端的流水号
ord_amt申请退款金额Y退款金额<=原交易金额
  • 原交易请求流水号、原交易全局流水号、原交易微信支付宝的商户单号三选一即可;
  • 退款金额不能大于交易金额;由于接口支持多次部分退款,多次退款场景下退款总额不能高于原交易金额;
  • 退款也是以异步返回的成功或失败状态为最终结果;
  • 一些特殊场景下退款时效可能比较长,注意接口描述文档中的退款时效说明;

3.3.3对账流程

为了满足商户财务的对账需求,系统提供了对账功能。

方案一:控台下载;

方案二:接口获取;

  • 接口下载的对账文件包括以下四类:
    • 日对账单类型:包括日结算对账单、日分账对账单、日出金对账单;
    • 日交易数据:主要是各种支付交易记录;
    • 月结算对账单:按月汇总的结算对账单;
    • 月交易数据:按月汇总支付交易记录;

3.3.4异步通知

针对交易结果,支付机构会通过异步消息的方式通知客户系统。 

调用接口时上送的异步通知地址为http/https路径:服务器为POST回调,默认超时时间为5秒,超时后会重试3次;不支持HTTP重定向;服务器对应答不是200~300之间的错误,会默认重试3次;异步通知服务器对HTTPS不认证验签和ALLOW_ALL_HOSTNAME_VERIFIER;如商户自定义通知端口,请使用8000-9005内端口,否则无法通知;URL 上请勿附带参数;异步回调请求编码集为:UTF-8;收到通知后请返回状态码“200”,响应异步通知。

注意事项:

同样的异步消息可能会通知多次,因此接收异步消息的处理需做好幂等,保障多次接收到同样的消息处理后结果不变。

在实现异步消息接收的同时,都建议您在重要的业务环节,通过反查接口确认 非终态 支付订单的状态,以保证在发生异步消息延迟或无法送达情况下的支付结果一致性。

4.分账功能

        因为微信端的大力监管,微信仅可以进行30%的分账比例且只能在微信全家桶中使用。为了广大老板的分账需求,我们特别推出了分账产品,最高支持100%分账比例不限分账人数,资金不落地,不会产生额外税务,费率还比官方低,也支持不同的业务场景哦(H5,PC,APP...)

        由于篇幅问题,分账功能详细内容小编我将在不久后更新哦,有意向者也可以私信哦,我们将根据您的产品给你匹配完美的解决方案

标签:异步,场景,商户,微信,程序,接口,之微信,支付,id
From: https://blog.csdn.net/weixin_58684273/article/details/140465240

相关文章

  • 这款免费可视化工具能帮你实现零代码GIS场景编辑
    在当今快速发展的科技时代,GIS场景编辑已成为各行业不可或缺的一部分。然而,复杂的操作和昂贵的软件成本常常令许多人望而却步。幸运的是,现在有了一款免费的可视化工具——山海鲸可视化,它能帮你轻松实现零代码GIS场景编辑,满足你从三维GIS需求出发的所有要求。山海鲸可视化在GIS场......
  • 01-初始化引导程序
    原理说明Bios会加载第一扇区到内存中,只有512字节,因此该部分的程序无法做太多的事,因此需要扩展程序,有以下两种方式:这里选用方式二,因为实现起来相对简单一点。16位实模式的情况下,寄存器也是16位,详见下图右边的AXBXCXDX8086CPU的寻址范围是1MB确定物理地址的方......
  • 基于SpringBoot的健身记录小程序设计和实现(源码+LW+调试文档)
     ......
  • 并发情况导致事务失效的场景
    publicvoidtest(Pageablerequest){for(inti=0;i<100;i++){//新建线程处理newThread(()->{userInfoService.testDemo();}).start();}}这里创建多个线程模拟多并发场景@Transactional(rollbackOn=Excepti......
  • 彩票数据自动抓取程序技术要点分析
    本人开发过一款彩票历史数据分析程序,参见文章《彩票历史记录分析工具》。如果彩票数据的提取依靠人工,搜集完整的数据数据非常耗时耗力;本人开发了一款网页分析程序,可以自动提取彩票数据。本文就分析程序实现的过程。程序界面:程序可以自动提取彩票的日期、中奖数据。简单讲......
  • 社区志愿者小程序功能模块
    社区志愿者小程序的功能模块是围绕着促进志愿服务活动的组织和参与而设计的。以下是一些核心功能模块,它们共同构成了一套完整的志愿者服务平台:###1.用户模块-**注册与登录**:用户注册账号,通过手机号、邮箱或社交媒体账号登录。-**个人中心**:用户可以查看和编辑个人信息,如......
  • 微信小程序毕业设计-宠物寄养平台系统项目开发实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • 微信小程序毕业设计-同城家政服务系统项目开发实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • 微信小程序毕业设计-国产动漫论坛系统项目开发实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • Spring事务失效场景详细总结(下)
    1.错误的传播特性        其实,我们在使用@Transactional注解时,是可以指定propagation参数的。 该参数的作用是指定事务的传播特性,spring目前支持7种传播特性:REQUIRED 如果当前上下文中存在事务,那么加入该事务,如果不存在事务,创建一个事务,这是默认的传播属性值。......