前言微信支付是企业级项目中经常使用的功能。
作为后端开发人员,完全掌握这项技术是很有必要的。
标志;徽标一、申请流程和步骤图1-1注册微信支付账号,获取微信小程序APPID,获取微信商户 商家ID,获取微信商家API私钥,配置微信支付回调地址,绑定微信小程序与微信支付的关系,搭建SpringBoot项目,编写后台支付接口,发布部署接口服务项目,使用微信小程序或UniAPP调用微信支付功能,支付接口的包配置,openid的jwt或token分发。
原微信小程序完成支付对接二、注册商家 2.1商户平台。
商家或企业想通过微信支付销售商品,首先要通过微信平台注册商家。
注册成功后会有商家信息等界面,包括账号信息,企业信息等等。
如图2-1所示:图2-12.2商户id商户id是项目开发中的唯一id,是微信支付给予每一个商户或企业的唯一ID。
也是客户拉起微信支付的凭据之一。
quot微信支付商户号 quot图2-1中是商家id。
三、API私钥成功注册商家后,还可以在微信平台设置API私钥。
如图3-1所示:图3-1API私钥也叫支付密钥,用户拉起微信支付时后台需要商户id和API密钥。
四、商户签约微信支付产品商家可根据需求签约微信支付的产品,主要包括:JSAPI支付:商家调用微信支付提供的JSAPI接口,在支付场景中调用微信支付模块完成收款;原生支付:商家系统根据微信支付协议生成支付二维码,用户再使用微信 quot扫描 quot完成付款方式;小程序支付:在微信中通过分享给朋友或扫描二维码打开小程序,即可调用微信支付完成下单过程;支付码支付:用户出示微信钱包中的条码和二维码,商家扫描用户条码即可完成收款;刷脸支付:用户可以通过 quot刷脸 quot在整合了微信刷脸支付SDK的线下设备上。
如图4-1所示:图4-1五、配置回调地址支付回拨地址是微信支付服务器返回给用户的支付信息的地址。
如果商家签了微信小程序产品,支付回拨地址可以配置,也可以不配置。
地址是公司的域名,或者没有配置。
六、小程序获取APPID首先你要在官网:图6-1注册成功后,可以获得小程序的唯一APPID。
如图6-2所示:图6-2七、微信支付与小程序绑定在微信支付平台绑定APPID。
如图7-1所示:图7-1八、实战部分 8.1SpringBoot框架搭建首先创建一个初始化SpringBoot项目;在项目/模块的resources文件夹下编写properties/yml配置文件;开发环境和生产环境应该在配置文件中隔离;配置文件还包括服务器、数据库、spring、token、日志、时区、json格式、mybatis-plus、swagger、redis的全局统一配置,服务器配置,微信小程序配置等。
项目基础架构后端接口控制器、与前端数据交互配置云服务器配置Swagger配置接口拦截器微信支付配置CommonConStanumsajaxresultsBaseController basentitypage页面所需的域接口和参数mappermapper文件接口serviceService:承担控制器层的接口方法定义。
Impl:接口的具体实现逻辑。
utils文件工具类Json工具类时间格式工具类第三方登录工具类8.2微信支付相关接口 8.2.1小程序用户登录接口。
首先,用户需要在小程序上授权微信用户登录,调用接口获取。
通过凭证可以交换用户的登录状态信息,包括当前小程序的唯一标识符、用户的唯一标识符以及本次登录的会话密钥。
具体登录流程如图8-1所示:图8-1此时调用服务器接口,请求参数如图8-2所示:图8-2用户登录后返回的参数如图8-3所示:图8-38.2.2统一下单接口用户登录小程序后,在小程序页面拉起支付请求时,会调用统一下单界面。
在拉起一个支付请求时,订单接口的参数需要两部分:一部分是商家和小程序相关的openid和appid,另一部分是商品相关的价格、名称、数量等参数。
下面用代码详细解释一下微信支付接口。
代码以REST风格的API接口形式编写。
统一订购界面@ API operation@ request mappingpublic Ajax result unified order{//验证小程序用户的登录//查询数据库订单信息//只有未付款的订单才能发起支付//0元购买未付款/* *设置与商户和小程序相关的请求参数* *//获取小程序的appid字符串appid=;WxPayUnifiedOrderRequest WxPayUnifiedOrderRequest=new WxPayUnifiedOrderRequest;wxpayunifieorderequest . set appId;//商品名称string body=sysorderscout . getcourename;body= 40?:body;wxpayunifieorderequest . set body;//订单编号WXPayUnifiedOrder请求。
SetOutTradeNo);//订单金额wxpayunifiedorequest . settotalfee。
multiply )。
int value);//事务类型wxpayunifiedorequest . settradetype;//支付回调地址wxpayunifiedorequest . setnotifyurl#039;/wx/API/order/notify-order);wxpayunifiederrequest . setspbillcreateip;//当前applet中用户的唯一标识符wxpayunifiedorerrequest . set OpenID);//调用微信服务类wxpayservice wxpayservice=wxpayconfiguration . getpayservice;返回Ajax result . success);} 8.2.3创建订单接口创建订单界面用户可以在商品页面下一个商品的订单,这个时候就需要为用户创建一个购买商品的订单。
流程是通过接口请求用户信息、商品信息等参数,经过逻辑判断后创建新订单,最后返回订单所需数据。
@ API operation@ request mappingpublic Ajax result create{//微信用户信息//判断是否购买了同款产品。
如果有,则不能新建订单//在满足条件后将数据插入数据库wxOrderResponse wxOrderResponse=orderservice . add;//如果新增失败,则提示If{ return Ajax result . error会被退回;}返回Ajax result . success;} 8.2.4取消订单接口取消订单界面当用户拉起微信支付时,如果在支付界面点击取消支付,则该操作视为取消订单的支付,此时订单的支付状态应显示在订单页面。
该接口可以将订单id作为请求参数,首先确定数据库中是否存在订单信息,然后限制可以取消的订单类型,最后更新数据库表状态。
@ API operation@ request mappingpublic Ajax result cancel{//判断订单是否有sys orders sys orders=sysorderservice . get byid;if{ return Ajax result . error;}//只有未付款的订单才能取消,如果){ return Ajax result . error,MyReturnCode。
ERR _ . getmsg);} sysordersservice . order cancel;返回Ajax result . success;} 8.2.5订单详情接口订单明细界面当订单生成后,用户可以在页面上查看货物订单的详细信息。
界面可以通过订单id从数据库中获取详细信息,该页面显示的数据由业务需求决定。
@ API operation@ request mapping@ apimplicitparams})公共Ajax结果myorderDetail{//从数据库获取详细参数sysorderdetailresponse=sysorderservice . Get detail;返回Ajax result . success;}订单详细信息逻辑/* * *订单详情页面参数处理* @ param orderId * @ return sysorderdetail response */@ override public sysorderdetail response get detail{ SysOrderDetailResponse SysOrderDetailResponse=Order mapper . get detail;//处理页面字符串phone num=sysorderdetailresponse . get mobile的手机号码;sysorderdetailresponse . set mobile ****#039;);//根据不同的订单状态显示不同的数据。
//计算剩余待支付时间并显示返回sysOrderDetailResponse} 8.2.6支付回调接口微信支付回拨是用户支付货款后,将数据发送到微信服务器,然后微信服务器将支付结果返回给用户和商家的过程。
其中主要关注的是用户支付-微信回拨判断-数据库修改的流程。
支付回拨接口@ API operation@请求映射公共字符串通知订单引发WxPayException { log . info;//微信支付服务WxPayService WxPayService=wxpayconfiguration。
getpayservice;WxPayOrderNotifyResult notifyResult=wxpayservice。
parseordernotifyresult;log . info;//对创建的订单进行支付系统订单系统订单=订单服务。
获取一个);if { if.相乘) value==通知结果。
gettotalfee){ String time end=notify结果。
gettime end;本地日期时间付款时间=本地日期时间效用。
解析;//支付时间;系统订单。
setorderamount);//微信订单编号系统订单。
settransactionid);//更新数据库订单服务。
通知订单;log . info);返回wxpaynotifyresponse . success;} else { return wxpaynotifyresponse。
失败;} } else { return wxpaynotifyresponse。
失败;}}其中,notifyOrder方法的作用是在支付成功后在数据库更新订单的状态。
通知订单方法@ Override @ Transactional公共void通知订单{//只有未支付订单能操作,即is_pay字段为0的订单if){//更新订单支付状态系统订单。
setispay;系统订单。
设置状态);系统订单映射器。
更新byid;//更新商品表状态//更新订单生命周期表}}至此,Spring Boot中的微信支付全过程已经分享完成。
如有不足,望大家指正。
王者之心2点击试玩
网联标准!微信支付与翼支付实现条码支付互联互通
网联新里程碑:微信支付与翼支付携手打造条码支付新时代
近期,移动支付领域迎来了一项重大突破,中国电信翼支付App通过其“扫一扫”功能实现了与微信支付个人收款码的无缝对接,用户在支付时可以自由选择绑定的银行卡或翼支付余额,进一步推动了条码支付的互联互通。
在全国范围内,翼支付的用户现在可以无障碍地扫描微信支付的收款码,这一合作的背后是微信支付与网联的深度合作。
早在今年6月,微信支付已支持中国移动“和包App”的扫码支付,而现在,这一互联互通的范围进一步扩大,网联作为关键桥梁,促成了这次跨平台的支付创新。
网联在条码支付互联互通方面的努力,源自于2019年中国人民银行的重点推进,旨在统一支付标准,打破服务壁垒。
在金融科技发展规划中,制定条码支付互联互通技术标准成为了关键步骤。
网联通过一系列试点和验证,如在宁波、成都等地的测试,逐步完善了这一技术体系,确保了不同APP和商户之间的条码支付互认互扫。
在这场互联互通的竞赛中,业界曾面临两种方案的抉择:一是通过统一标准接入清算平台,二是通过机构间接口对接。
网联凭借制定标准和统一接入的优势,逐步推进了这一进程,如今,微信支付与翼支付的联动,无疑证明了这一策略的成功。
翼支付的商城已经整合了众多优质资源,与52家央企合作,上架各类品牌商品,为消费者提供了丰富的购物体验。
通过与微信支付的合作,翼支付的支付场景将进一步拓宽,强化其作为电信运营商的服务优势,提升消费者的支付便捷性。
未来,各方将在此基础上继续探索更多场景的开放合作,推动支付行业的持续创新。
微信支付也不甘示弱,自2019年起,不仅参与行业规范制定,还与银联、网联等清算组织深度对接,实现线下条码互认互扫,并在小程序、Q币充值等领域积极拓展合作。
在数字人民币领域,微信支付同样积极作为,支持各类机构和个人钱包的连接,为货币电子化的未来打下坚实基础。
这一系列举措,充分展示了微信支付在推动支付领域互联互通方面的领导力和决心。
总的来说,微信支付与翼支付的这次合作是支付行业互联互通道路上的一个重要里程碑,预示着支付服务将更加便捷,消费者体验将得到显著提升。
未来,我们期待看到更多的支付平台加入这一创新潮流,共同塑造更加开放、连通的支付新生态。