本文转载自微信公众号《Java极客技术》,作者鸭血范。转载本文请联系Java极客技术公众号。大家好,我是阿芬~前段时间阿芬在公司接手了一个支付项目,是对接微信和支付宝的。在开发了这个项目之后,阿芬完整的体验了微信和支付宝的开发过程,也踩过一些坑。最近正好看到有小伙伴想对接微信和支付宝,但是不知道怎么开发,阿粉就给大家总结一下微信支付和支付宝的开发过程。整体流程明确使用支付方式首先我们要明确我们需要使用的支付方式。因为微信支付和支付宝的支付方式很多,不同的支付方式对应不同的业务场景,开发对接的复杂度也不同。以微信支付为例,一共提供了以下几种支付方式。这些支付方式对应不同的业务场景,例如:支付码支付:商户使用扫码器或其他扫码设备扫描用户出示的支付码,适用于线下超市收款原生支付:商户支付系统中根据微信支付协议生成支付二维码,用户扫码打开微信收银台确认并完成支付JSAPI支付:用户在商户下单公众号,进入支付密码,完成支付,适用于网购场景APP支付:用户在商家APP下单,跳转到微信完成支付,支付完成后跳转回商家APP,显示支付结果H5支付:用户在手机浏览器下单,然后跳转到微信完成支付小程序支付:用户打开商户小程序m下单,输入支付密码并完成支付,返回商户小程序。如果您还有点迷茫,不知道连接哪种支付方式,可以参考微信支付的接入指南,网址如下:https://pay.weixin.qq.com/static/applyment_guide/applyment_index.shtml本网站列出了上述支付方式的业务场景,您可以选择适合自己的业务场景。访问角色其次,我们需要明确以何种身份访问。不同的身份会使用不同的开发文档。微信支付和支付宝支持以下三种身份接入:普通商户、企业服务商、银行服务商、服务商是指具有技术开发能力,为普通商户提供微信服务的第三方开发商。支付技术开发与营销方案,即服务商可以在微信支付开放服务商高级接口的基础上,为商户完成支付应用、技术开发、设备调试、活动营销等全生态链服务。银行服务商适用于银行单位,会使用银联和网联提供的接口接入。服务商和银行服务商可以说是比较特殊的。一般企业通过普通商户接入微信支付和支付宝。因此,本文的后续流程将从普通商户的接入入手。接入流程我们确定了以上两个基本条件后,就可以开始微信支付的接入流程了。这个过程分为以下三个步骤:导入参数配置对接开发对于我们技术同学来说,其实我们只需要参与接下来的两步,所以我们重点关注后两步。第一步的升压工作一般都是市场部或者财务部的同学来做,但是在一些小公司可能需要技术同学来安排整个过程,这里简单介绍一下。有的同学可能和我当初一样。刚看到“输入”这个词,是不是很奇怪,不明白这个词是什么意思。其实导入的意思就是将相关的需要材料提交给微信支付和支付宝。一般需要的材料有:营业执照、公众号法定代表人/个体户经营者证、特殊资质证明材料等。首先我们要明确我们公司的类型。以微信支付为例,仅对企业、个体工商户、政府和事业单位、民办非企业、社会团体、基金会型商户开放。不同科目类型所需材料及文件如下:目前微信支付和支付宝均支持自我介绍,相关材料可在相应网站提交。我们提交材料后,还需要对账号进行验证。微信支付和支付宝会小额转账到上面填写的企业账户。我们收到的时候需要在网站上填写这个金额。这一步的目的主要是验证公众号的真实性。完成这一步后,传入流程就基本完成了,我们进入参数配置的步骤。参数配置微信支付和支付宝参数配置有较大区别,这里分别介绍。微信支付我们完成了上面的商户导入配置之后,其实我们只完成了第一步。由于商户发起微信支付交易依赖于公众号、小程序、移动应用(即APPID)和微信支付商户号(MCHID)的绑定关系,因此也需要在签约后登录对应的APPID平台完成绑定关系确认。如果此时您还没有申请,我们还需要在相应的微信平台申请。这里不得不吐槽一下微信,appid没有统一申请,公众号,手机申请都是在不同的网站上申请的。这里汇总了公众号、小程序等注册地址:公众号/小程序:微信公众平台(https://mp.weixin.qq.com/)APP/PC网站:微信公开平台(https://open.weixin.qq.com/)企业微信:企业微信管理平台(https://work.weixin.qq.com)注册完公众号等账号后,我们还需要链接微信支付商户号与应用公众号、小程序等进行绑定,这里有一张官方流程指引图,详情请点击:https://kf.qq.com/faq/1801116VJfua1801113QVNVz.html来源:https://kf.qq.com/faq/1801116VJfua1801113QVNVz.html完成上述过程后,我们需要设置API密钥,然后下载API证书。API证书获取流程参考:https://kf.qq.com/faq/161222NneAJf161222U7fARv.htmlAPI密钥设置流程参考:https://kf.qq.com/faq/180830UVRZR7180830Ij6ZZz.html完成以上步骤后,我们就有了会是以下商户参数:APPID微信支付商户号,mch_idAPIkeyAPI证书Appsecret这些参数我们需要妥善保管,不要散播,以免造成资金损失。支付宝支付宝设置可能没有微信支付那么复杂。首先,我们需要在开发者中心栏目下的支付宝开放平台(open.alipay.com)上创建一个应用。第二步,我们需要在创建的应用中添加相应的支付功能。比如需要使用扫码支付,就需要使用刷脸支付。第三步,我们需要配置当前应用的公私钥信息。首先我们需要生成一对RSA2公钥和私钥,这里我们可以使用支付宝官方的工具来生成。工具下载地址:https://opendocs.alipay.com/open/291/105971生成后,我们需要在支付宝网站上配置支付公钥。需要注意的是,公钥配置完成后,将不支持查看,只支持重新修改公钥,所以我们需要重新生成一对公私钥。设置应用公钥后,我们还可以查看支付宝的公钥。我们还需要保留此公钥信息。这时我们手上就有了支付宝的参数信息,作用如下:appid应用私钥:适用于接口参数加密支付宝公钥:适用于支付宝返回参数校验上面我们需要注意区别应用公钥和支付宝公钥之间,应用公钥需要给支付宝。一旦在支付宝网站上设置完成,我们将不会再使用这个应用公钥。完成这一步后,我们基本完成了开发的参数配置,接下来就是开发了。基础开发完成后,我们需要把app上架支付宝。上架时,我们需要根据app选择的支付能力来签订合同。其实这个签单就是我们上面说的导入,需要填写商户的各种信息。上面说了这么多对接开发,最后说说开发步骤。其实对接开发真的不难。我们只需要根据相应的文档组装好接口参数,然后发送给微信支付宝即可。微信支付文档地址:https://pay.weixin.qq.com/wiki/doc/api/index.html支付宝文档地址:https://opendocs.alipay.com/open/194/105203这里就不说了具体源码实现请参考相应的接口文档。这里主要分享一些经验,防止大家误入歧途。同步接口和异步接口同步接口:我们调用API接口后,可以同步返回具体的推算结果。异步接口:我们调用API接口成功。这一步只是返回一些参数。我们需要在前台页面拼接这些参数,然后唤醒微信支付和支付宝,最后完成支付。支付结果将异步通知给应用程序。比如微信支付和支付宝API接口中,只有支付码支付是同步接口。这里参考官方时序图:支付码支付免密码流程时序图,其余接口均为异步接口。这里参考微信支付原生时序图:原生支付接口模式-时序图对于异步接口,我们除了开发一个API接口发送程序外,还需要开发一个接收程序,用于接收微信支付和支付宝。安全微信支付和支付宝涉及的所有API接口都需要进行签名获取签名值。这一步的目的主要是为了安全。微信支付签名方法如图:在这一步中,我们需要用到上一流程中提到的微信支付的APIkey。另外,微信支付的退款接口有点特殊,还需要用到发给我们的API证书。另外,在查看微信支付的资料时,阿芬还发现微信支付的接口有V3版本。该版本的参数格式支持JSON。新老界面的区别如下:V2VSV3阿粉上面说的是基于V2版本。如果在搜索引擎上搜索,可以看到市面上大部分接口还在使用V2版本。.如果连接的是V3版本的接口,一定要记得查看V3版本的API接口,地址如下:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/Overview.shtml另外,对于异步通知的内容,我们必须进行签名校验。签名验证的目的是防止数据泄露造成“虚假通知”,造成经济损失。这里要注意,异步通知可能会发送多次,我们的程序一定要注意幂等控制。建议可以采用如下流程:当收到通知进行处理时,先查看对应业务数据的状态,判断通知是否已经处理,如果没有处理,如果处理了,直接返回结果成功。在对业务数据进行状态检查和处理之前,需要使用数据锁进行并发控制,避免函数重入造成数据混乱。开源工具我们在开发过程中可以使用一些开源工具。这些工具帮助我们封装了签名和验证的步骤,以及网络发送程序,大大降低了开发的复杂度。支付宝开源工具主要由支付宝官方提供,使用介绍:https://opendocs.alipay.com/open/54/103419提供Maven依赖,如下:
