文章目录
- @[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.总结
文章目录
- @[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
普通商户注册入口:
从如下入口一步一步的根据提示完成注册即可:
1.1.2 微信支付服务商接入指引
https://kf.qq.com/product/wechatpaymentmerchant.html#hid=2449
服务商/合作伙伴平台
https://pay.weixin.qq.com/index.php/partner/public/home
成为合作伙伴接入申请入口
https://pay.weixin.qq.com/xdc/mchapplyment4partnerweb/index.php/apply/applyment4partner_home/guide_partner/apply_auth
根据提示完成注册即可。
1.2 微信开放平台注册小程序和公众号
微信公众平台
https://mp.weixin.qq.com/
注册公众号和小程序账号,根据自己的需求来注册,一般这两个号都是要注册的:
1.3 微信开放平台注册开发者账号
微信开放平台
https://open.weixin.qq.com/
根据以下入口完成注册即可
微信开发者账号需要支付300元的费用哦。
1.4 微信商户平台绑定小程序和公众号的appId账号
1.4.1 微信公众平台扫码登录微信公众号账号或微信小程序账号
微信公众号后台查看是否appid已绑定授权商户号:
微信小程序后台查看是否appid已绑定商户号:
2.微信商户后台配置
2.1产品中心开通产品
2.2开发配置
2.3账户中心的API安全配置
API证书及秘钥
https://kf.qq.com/product/wechatpaymentmerchant.html#hid=2874
2.4小程序开发管理开发设置
ip白名单选配、域名需要配置
2.5公众号配置
2.5.1公众号设置-功能设置设置
设置js接口安全域名(开通JSAPI支付需要配置这里)
参考
https://blog.csdn.net/weixin_45865428/article/details/117807648
2.5.1基础配置
2.5.2安全中心
选配
2.5.3接口权限
有的接口需要这里开通权限才可以调用到的:
以上就是大致需要配置的地方,也会有其它特殊的配置,每种类型的产品接口文档里面都会有的,可以去看官方文档或者是去上网查询相关资料处理解决。
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版
4.1APIv2调用流程
微信APIv2签名算法
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3
4.2APIv3调用流程
其中,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版中的参数
AppIDAppSecret支付专用签名串PaySignKey商户号PartnerID初始密钥PartnerKey并且包含一个证书文件: 安全证书
4.3.2V3版中的参数
AppIDAppSecret商户号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
4.4.2 微信支付服务商平台
服务商
https://pay.weixin.qq.com/partner/public/home
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.htmlV3版本参考文档: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_1V3版本:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtmlV2版本获取用户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_1V3版本: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_1V3版本: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_1V3版本: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.shtmlV2接口规则参考: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.binarywang</groupId><artifactId>weixin-java-pay</artifactId><version>4.2.0</version>
</dependency>
此依赖可以选择最新稳定的版本,该版本支持v2的api多一点,推荐使用,里面慢慢的开始在集成v3版本的接口了。
6.2 wechatpay-java
依赖
<dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-java</artifactId><version>0.2.11</version></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微信支付集成开发的总结与分享,下一次分享是关于“商家转账到零钱与企业付款到零钱”的集成开发,尽情期待,希望我的分享对你有所帮助,请一键三连,么么么哒!