Java微信支付集成开发

文章目录

    • @[toc]
  • 1.接入前准备
    • 1.1 微信商户平台注册商户号
      • 1.1.1 微信支付商户接入指引
      • 1.1.2 微信支付服务商接入指引
    • 1.2 微信开放平台注册小程序和公众号
    • 1.3 微信开放平台注册开发者账号
    • 1.4 微信商户平台绑定小程序和公众号的appId账号
      • 1.4.1 微信公众平台扫码登录微信公众号账号或微信小程序账号
  • 2.微信商户后台配置
    • 2.1产品中心开通产品
    • 2.2开发配置
    • 2.3账户中心的API安全配置
    • 2.4小程序开发管理开发设置
    • 2.5公众号配置
      • 2.5.1公众号设置-功能设置设置
      • 2.5.1基础配置
      • 2.5.2安全中心
      • 2.5.3接口权限
  • 3.开放模式(微信支付的账户关系)
    • 3.1.普通模式
    • 3.2.服务商模式
      • 3.2.1普通服务商模式
      • 3.2.2银行服务商
  • 4.v2和v3版的区别
    • 4.1APIv2调用流程
    • 4.2APIv3调用流程
    • 4.3参数区别
      • 4.3.1V2版中的参数
      • 4.3.2V3版中的参数
    • 4.4 两种商户的区别
      • 4.4.1 微信支付普通商户平台
      • 4.4.2 微信支付服务商平台
      • 4.4.3 微信支付文档对应的地址如下
      • 4.4.4 普通直连模式和服务商模式主要区别
      • 4.4.5 普通商户、服务商户和特约商户说明
  • 5.支付类型
    • 5.1小程序支付
      • 5.1.1V2场景
      • 5.1.2V2版本大概流程
    • 5.2 JSAPI支付(公众号使用此方式)
      • 5.2.1 V2场景
      • 5.2.2 V2版本大概流程
    • 5.3H5支付
      • 5.3.1 V2场景
      • 5.3.2 V2版本大概流程
    • 5.4 APP支付
      • 5.4.1 场景
      • 5.4.2 V2版本大概流程
    • 5.5 NATIVE支付
    • 5.5.1 V2场景
      • 5.5.2 V2大概流程
    • 5.6接口规则
  • 6.集成轮子选择
    • 6.1 weixin-java-pay
    • 6.2 wechatpay-java
    • 6.3 wx-java-pay-spring-boot-starter
    • 6.4 IJPay
    • 6.5 Jeepay
    • 6.6 spring-boot-pay
    • 6.7 pay-spring-boot-starter-parent
    • 6.8 roncoo-pay
    • 6.9 XxPay
    • 6.10 Fastpay
    • 6.11 aaden-pay
  • 7.总结

1.接入前准备

  首先需要有公司的资质营业执照、法人身份证信息、公司开户行信息等信息,说白了就是要先注册一个公司,各种资质需要齐全,然后需要去注册申请一个域名,在华为云上购买或者是其它平台购买

1.1 微信商户平台注册商户号

  一般我们只需要注册如下的1.1.1即可,这两种方式后面会介绍接入模式

  微信商户平台

https://pay.weixin.qq.com/

1.1.1 微信支付商户接入指引

https://kf.qq.com/faq/210423UrIRB7210423by6fQn.html

  普通商户注册入口:

Java微信支付集成开发_第1张图片

  从如下入口一步一步的根据提示完成注册即可:

Java微信支付集成开发_第2张图片

1.1.2 微信支付服务商接入指引

https://kf.qq.com/product/wechatpaymentmerchant.html#hid=2449

  服务商/合作伙伴平台

https://pay.weixin.qq.com/index.php/partner/public/home

Java微信支付集成开发_第3张图片

  成为合作伙伴接入申请入口

https://pay.weixin.qq.com/xdc/mchapplyment4partnerweb/index.php/apply/applyment4partner_home/guide_partner/apply_auth

Java微信支付集成开发_第4张图片

  根据提示完成注册即可。

1.2 微信开放平台注册小程序和公众号

  微信公众平台

https://mp.weixin.qq.com/

Java微信支付集成开发_第5张图片

  注册公众号和小程序账号,根据自己的需求来注册,一般这两个号都是要注册的:

Java微信支付集成开发_第6张图片

1.3 微信开放平台注册开发者账号

  微信开放平台

https://open.weixin.qq.com/

Java微信支付集成开发_第7张图片

  根据以下入口完成注册即可

Java微信支付集成开发_第8张图片

  微信开发者账号需要支付300元的费用哦。

1.4 微信商户平台绑定小程序和公众号的appId账号

Java微信支付集成开发_第9张图片

1.4.1 微信公众平台扫码登录微信公众号账号或微信小程序账号

  微信公众号后台查看是否appid已绑定授权商户号:

Java微信支付集成开发_第10张图片

  微信小程序后台查看是否appid已绑定商户号:

Java微信支付集成开发_第11张图片

2.微信商户后台配置

2.1产品中心开通产品

Java微信支付集成开发_第12张图片

2.2开发配置

Java微信支付集成开发_第13张图片

2.3账户中心的API安全配置

  API证书及秘钥

https://kf.qq.com/product/wechatpaymentmerchant.html#hid=2874

Java微信支付集成开发_第14张图片

2.4小程序开发管理开发设置

  ip白名单选配、域名需要配置

Java微信支付集成开发_第15张图片

2.5公众号配置

2.5.1公众号设置-功能设置设置

  设置js接口安全域名(开通JSAPI支付需要配置这里)

  参考

https://blog.csdn.net/weixin_45865428/article/details/117807648

Java微信支付集成开发_第16张图片

2.5.1基础配置

Java微信支付集成开发_第17张图片

2.5.2安全中心

  选配

Java微信支付集成开发_第18张图片

2.5.3接口权限

  有的接口需要这里开通权限才可以调用到的:

Java微信支付集成开发_第19张图片

  以上就是大致需要配置的地方,也会有其它特殊的配置,每种类型的产品接口文档里面都会有的,可以去看官方文档或者是去上网查询相关资料处理解决。

3.开放模式(微信支付的账户关系)

  接入模式

https://pay.weixin.qq.com/docs/partner/development/glossary/mode.html

  选择接入模式–以JSAPI支付接入前准备为例

https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_1.shtml

3.1.普通模式

  最常规的普通模式,适用于有自己开发团队或外包开发商的直连商户收款。不能扩展子商户。

3.2.服务商模式

  第三方服务商申请自己的s服务号,并通过该服务号申请服务商mch_id,来获得微信支付服务商能力 。再通过服务商mch_id为所服务的特约商户申请创建微信支付sub_mch_id,创建好的sub_mch_id默认和服务商的mch_id建立父子授权关系。以此来使用微信支付提供的开放接口

  服务商模式下又分普通服务商和银行服务商两大类,除资金清算能力不同,在账号模型和使用上,普通服务商和银行服务商并无区别。

3.2.1普通服务商模式

  最常规的第三方模式,第三方帮特约商户申请商户号并为其进行支付开发,第三方本身不经手资金,支付成功后资金直接进入特约商户商户号。

3.2.2银行服务商

  有清算资质的银行机构可申请成为微信支付银行类服务商,开通后可通过api创建特约商户号并为其进行支付开发,资金直接进入银行类服务商账户,由银行服务商为特约商户进行资金清算;

4.v2和v3版的区别

  v2-API文档

https://pay.weixin.qq.com/wiki/doc/api/wxpay_v2/pages/QuickPay.shtml

  v3-API文档

https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_7_0.shtml

  现在微信支付分为v2和v3两版,2014年9月10号之前申请的为v2版,之后申请的为v3版

Java微信支付集成开发_第20张图片

4.1APIv2调用流程

  微信APIv2签名算法

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3

Java微信支付集成开发_第21张图片

4.2APIv3调用流程

Java微信支付集成开发_第22张图片

其中,APIv3接口中特有的几个概念:

(1)证书序列号

每个证书都有一个由CA颁发的唯一编号,即证书序列号。如果读取到的序列号是10进制整形需要转换为大写的16进制。

(2)平台证书

微信支付平台证书是指由微信支付负责申请的,包含微信支付平台标识、公钥信息的证书。

a、不同的商户,对应的微信支付平台证书是不一样的。

b、微信支付APIv3使用微信支付的平台私钥进行应答签名,商户使用平台证书中的公钥进行验签。

c、微信平台证书会周期性更换,商户应实现定期更新平台证书的逻辑实现平台证书平滑切换,即:定期调用该接口,间隔时间小于12 小时,参考获取平台证书接口。

https://link.zhihu.com/?target=https%3A//pay.weixin.qq.com/wiki/doc/apiv3/apis/wechatpay5_1.shtml

目前已知的微信更换平台证书的场景:

  • 证书到期后,必须更换。(目前是五年)
  • 证书到期前,例行更换。(每年一次)

d、旧证书过期前10天生成新证书,旧证书过期前5天至过期当天,新证书开始逐步放量用于应答和回调的签名。为了保证更换过程中不影响API的使用,请求和应答的HTTP头部中包括证书序列号,以声明签名或者加密所用的密钥对和证书。

4.3参数区别

4.3.1V2版中的参数

AppID

AppSecret

支付专用签名串PaySignKey

商户号PartnerID

初始密钥PartnerKey

并且包含一个证书文件: 安全证书

4.3.2V3版中的参数

AppID

AppSecret

商户号PartnerID

初始密钥PartnerKey

商户号MCHID

申请编号

商户平台登录帐号

商户平台登录密码

  包含5个证书文件(证书pkcs12格式、证书pem格式、证书密钥pem格式、CA证书, 安全证书)

  如果收到的邮件中没有【支付专用签名串PaySignKey】,表示已经是V3版的微信支付了。

4.4 两种商户的区别

如下: 微信支付普通商户平台 微信支付服务商平台

4.4.1 微信支付普通商户平台

普通商户

https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/index.shtml

Java微信支付集成开发_第23张图片

4.4.2 微信支付服务商平台

  服务商

https://pay.weixin.qq.com/partner/public/home

Java微信支付集成开发_第24张图片

4.4.3 微信支付文档对应的地址如下

  • 微信支付普通商户平台文档(微信直连模式)

    https://pay.weixin.qq.com/wiki/doc/apiv3/index.shtml
    
  • 微信支付服务商平台文档(微信服务商模式)

    https://pay.weixin.qq.com/wiki/doc/apiv3_partner/index.shtml
    

  注意:接口文档还分为了V2和V3两种,有V2版本的接口和V3版本的接口两种不同的接口,V2是旧的接口,我们应当选择最新的V3版本接口来对接开发。

1)普通商户直连模式主要包含了以下几大块:

基础支付(JSAPI支付、APP支付、H5支付、Native支付、小程序支付、合单支付、付款码支付、刷脸支付)

经营能力(微信支付分、支付即服务)

行业方案(智慧商圈)

营销工具(代金券、商家券、委托营销、消费卡、支付有礼、小程序发券插件、H5发券、图片上传(营销专用)、现金红包)

资金应用(企业付款到零钱、分账)

风险合规(消费者投诉)

其他能力(清关报关、图片上传、视频上传)

目前用得最多也就是小程序支付等基础支付接口、企业付款到零钱、分账、图片上传、视频上传。

2)服务商模式主要包含了一下几大块:

商户进件(特约商户进件)

基础支付(JSAPI支付、APP支付、H5支付、Native支付、小程序支付、合单支付、付款码支付、刷脸支付)

经营能力(支付即服务、点金计划)

行业方案(电商收付通、智慧商圈)

营销工具(代金券、商家券、委托营销、支付有礼、小程序发券插件、H5发券、图片上传(营销专用)、现金红包)

资金应用(连锁品牌分账、分账)

风险合规(商户开户意愿确认、消费者投诉)

其他能力(图片上传、视频上传)

目前用得最多也就是小程序支付等基础支付接口、分账、图片上传、视频上传。

4.4.4 普通直连模式和服务商模式主要区别

  普通直连模式和服务商模式主要区别在于,普通直连模式不需要关联服务商商户号,可以直接发起支付,而服务商模式下服务商商户号不能直接发起支付,应当是服务商旗下的子商户通过服务商代发起支付,子商户商户号需要关联服务商商户号。

  综合考虑:

1.微信普通商户,需要公众号认证才能开通。而特约商户不需要公众号即可由服务商开通,但是如果想用公众号支付,仍然需要绑定已经认证的微信公众号(服务号)。

2.虽然特约商户号,可以不认证服务号就能开通(节约300元/年),但是只能使用微信扫码支付,适合线下店铺使用。如果有线上业务建议使用普通商户。

3.大部分第三方平台或微信应用都不支持特约商户的模式(Sub_APPID),所以建议如果有网站业务需要微信收款,还是使用普通微信商户吧。

4.openid,demo里直接传的openid,服务商模式需要传sub_openid,获取的方式就不说明了,总之获取所需都是子商户即特约商户的appid,appsecret。

5.demo里设置的参数全部都要填服务商的,而不是子商户的。

6.在服务商的微信支付商户后台设置授权目录,而不是像普通商户那样在公众平台后台来设置。

  普通商户版就是普通商户版。如果你自己开发自己用,你就是普通商户。服务商版就是服务商版。就是第三方服务提供商。

4.4.5 普通商户、服务商户和特约商户说明

普通商户说明:

1.能独立完成收款的微信商户

2.不可成为服务商的特约商户

3.收款能力比特约商户强

服务商户说明:

1.服务商可以由普通商户申请升级成为服务商

2.升级成为服务商之后没有了商户的收款能力

3.可以发展特约商户成为自己的下级商户并提供支付能力

4.可以通过发展特约商户赚取分佣和手续费

特约商户说明:

1.服务商的下级商户

2.依赖于服务商的支付服务系统服务

3.不可以转成普通商户

4.可同时拥有普通商户和特约商户两个商户

5.支付类型

支付产品

https://pay.weixin.qq.com/docs/partner/development/glossary/product.html

5.1小程序支付

5.1.1V2场景

  商户已有微信小程序,用户通过好友分享或扫描二维码在微信内打开小程序时,可以调用微信支付完成下单购买的流程。

5.1.2V2版本大概流程

①商户系统向微信平台预下单(获取prepay_id预支付交易会话标识) -> ②商户小程序拉起微信支付 ->③用户在移动端完成支付 ->④微信系统异步返回支付结果;

参考:

V2版本参考文档:https://pay.weixin.qq.com/wiki/doc/api/index.html

V3版本参考文档:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_0.shtml

5.2 JSAPI支付(公众号使用此方式)

5.2.1 V2场景

  JSAPI支付适用于线下场所、公众号场景和PC网站场景。JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款。

5.2.2 V2版本大概流程

①商户系统向微信平台预下单(获取prepay_id预支付交易会话标识) -> ②商户小程序拉起微信支付 ->③用户在移动端完成支付 ->④微信系统异步返回支付结果;

参考:

V2版本:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1

V3版本:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml

V2版本获取用户openid:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_4

5.3H5支付

5.3.1 V2场景

  H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。

5.3.2 V2版本大概流程

①商户系统向微信平台预下单(获取prepay_id与mweb_url,用于调起微信支付中间页) ->②跳转到微信支付中间页(需要拼接商户系统目标页面地址) ->③拉起微信客户端进行支付 ->④微信系统异步返回支付结果 ->⑤返回商户系统目标页面,商户页面查询字符结果;

参考:

V2版本:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1

V3版本:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_1.shtml

5.4 APP支付

5.4.1 场景

  APP支付是指商户通过在移动端应用APP中集成开放SDK调起微信支付模块来完成支付。目前微信支付支持手机系统有:IOS(苹果)、Android(安卓)和WP(Windows Phone)。

5.4.2 V2版本大概流程

①商户系统向微信平台预下单(获取prepay_id预支付交易会话标识) ->②商户APP拉起微信客户端进行支付 ->③用户完成支付 ->④微信系统异步返回支付结果 ->⑤微信客户端回调商户APP,商户APP进行支付结果查询;

参考:

V2版本:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1

V3版本:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_5_0.shtml

5.5 NATIVE支付

5.5.1 V2场景

  商户系统按微信支付协议为不同商品生成不同的二维码,用户再用微信“扫一扫”完成支付的模式。Native支付适用于PC网站、实体店单品或订单、媒体广告支付等场景。

5.5.2 V2大概流程

①商户系统向微信平台预下单(获取prepay_id与code_url) ->②商户系统根据code_url生成二维码展示给用户 ->③用户使用微信客户端完成支付 ->④微信系统异步返回支付结果;

参考:

V2版本:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1

V3版本:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_1.shtml

5.6接口规则

V3接口规则参考:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay2_0.shtml

V2接口规则参考:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_1

6.集成轮子选择

6.1 weixin-java-pay

依赖

<dependency>
    <groupId>com.github.binarywanggroupId>
    <artifactId>weixin-java-payartifactId>
    <version>4.2.0version>
dependency>

  此依赖可以选择最新稳定的版本,该版本支持v2的api多一点,推荐使用,里面慢慢的开始在集成v3版本的接口了。

6.2 wechatpay-java

依赖

 <dependency>
    <groupId>com.github.wechatpay-apiv3groupId>
    <artifactId>wechatpay-javaartifactId>
    <version>0.2.11version>
 dependency>

此依赖是微信官方出的v3版本的依赖包,推荐使用

6.3 wx-java-pay-spring-boot-starter

https://blog.csdn.net/san13219091/article/details/127668335

6.4 IJPay

https://gitee.com/yanliebing_admin/IJPay

该项目对v3版本的接口支持较好,推荐使用

6.5 Jeepay

https://docs.jeequan.com/docs/jeepay/index

6.6 spring-boot-pay

https://gitee.com/52itstyle/spring-boot-pay#spring-boot-pay

6.7 pay-spring-boot-starter-parent

pay-spring-boot-starter-parent

6.8 roncoo-pay

https://github.com/roncoo/roncoo-pay

6.9 XxPay

https://gitee.com/jmdhappy/xxpay-master

6.10 Fastpay

https://gitee.com/heshouyou_1/fastpay

6.11 aaden-pay

https://gitee.com/aaden/aaden-pay

  以上是一些比较好用的、开源的轮子,或者你也可以搞一套轮子,然后开源给大家来观摩学习,这个也是一种开源精神,来自开源,回馈开源。

7.总结

  以上就是java微信支付集成开发的总结与分享,下一次分享是关于“商家转账到零钱与企业付款到零钱”的集成开发,尽情期待,希望我的分享对你有所帮助,请一键三连,么么么哒!

你可能感兴趣的:(java,微信支付)