微信支付开发——多种支付

微信提供了好多种的支付产品,本文要讲解的是我在实际开发中用的几种:JSAPI支付、NATIVE支付(扫码支付)、H5支付、小程序支付,微信提供的各种支付方式,只要了解一种,其他几种支付差别不大。

                                 

其中不管是哪种支付,都需要调用统一的一个接口:微信支付统一下单接口:

                                

支付流程:

  1. 首先用户在应用程序中进行下单(也就是点击支付)的请求
  2. 此时会请求到后台,并且在后台中进行下订单,生成订单号等处理
  3. 后台去调用微信的统一下单接口API,此时会传入一系列的参数
  4. 微信会返回给我们一些参数,以及交易的链接等信息
  5. 后台会将这些返回的信息,返回给前端,前端根据交易的链接或者其他的信息生成支付的二维码或者是调起微信的支付,输入密码即可完成支付。
  6. 用户支付成功后,会进行异步的通知,微信向配置的回调地址发送支付结果,或者是我们也可以主动调用查询支付结果的API接口,查询支付状态。

这就是不管哪种支付都需要用到的支付流程,只不过每种支付有一些细微的差别而已。下面针对每种支付着重讲一下支付之前的相关配置,以及我支付的时候需要的一些问题,其中比较麻烦的就是JSAPI支付。

JSAPI支付:

一、在进行支付之前需要先配置各种参数来保证支付成功,其中JSAPI支付尤为麻烦:

  1. 在微信支付商户后台配置关联公众号的appId,产品中心——AppID账号管理——点击关联APPID将同一品牌的公众号的appId添加并提交。此时关联状态是“审核中”

                                  

  2. 在微信支付商户后台中进行“开发配置”,配置支付的回调地址或者支付域名,JSAPI支付就需要配置支付域名,支付域名可配置多个。产品中心——开发配置。

                               

 

  3. 配置的关联公众号的AppId,需要登陆公众号管理后台先同意小程序关联到公众号的请求。

  4. 因为JSAPI支付需要先授权,所以需要配置网页授权域名,开发JSAPI支付时,在统一下单接口中要求必传用户openid,而获取openid则需要您在公众平台设置获取openid的域名,只有被设置过的域名才是一个有效的获取openid的域名,否则将获取失败。

                                     

     

                                         

       此时需要将txt文件下载,并放到开发的服务器上,需要能够外网根据域名能够访问到才可以,才能点击“确认”,否则不能点击。到此JSAPI支付,需要的所有配置全部配置完成。

二、用户同意授权,获取code,此时使用的是“静默授权”用户无感知的授权。

链接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

      参数:appid:公众号的唯一标识

                redirect_uri:重定向的url,就是授权后要跳转的页面

                scope:应用授权作用域

                snsapi_base:不弹出授权页面,直接跳转,只能获取用户openid

                snsapi_userinfo:弹出授权页面,可通过openid拿到昵称、性别、所在地

                state:重定向后带的参数

                静默授权后会产生一个code,只有5分钟时间的有效期。

 

三、JSAPI支付的需要用到OpenId,所以在调用“统一下单”接口之前需要获取OpenId的值,通过上一步的code来换取access_token同时也就获得了openId:

链接:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

       请求参数:APPID,SECRET,CODE,

       需要注意:APPID和SECRET都是微信公众号的ID和密码,而不是商户后台的ID和密码。

四、获取到OpenId就可以调用“统一下单”接口

微信提供API的地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

链接

        URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder

        URL地址:https://api2.mch.weixin.qq.com/pay/unifiedorder(备用域名)见跨城冗灾方案

        是否需要证书:否

        请求参数:

                               

                               

                                

                                

                                

微信统一下单接口的返回参数,详细的请见文档。

我此处使用的是微信官方文档给出的SDK和DEMO的下载,直接下载后放入到项目中,里面已经封装好的一些方法,也正是因为用微信官方文档的SDK,有一些隐藏的问题没有发现,导致后来JSAPI的支付调试了好长时间才调起成功。

 问题

   一、在调起支付的时候,一直报“支付验证签名失败”问题?

                                                          

原因:我使用的是微信官方文档自带的SDK与DEMO,在生成签名的时候也使用默认的生成了签名,没有在重新生成签名,导致没有“时间戳timeStamp”的字段,生成签名的Map里面的值也比正常的多,最后导致“支付验证签名失败”。

解决:前端需要根据后端传递的sign签名,在进行“二次签名”去调起微信的支付,所以就需要保持后端在生成签名的时候,需要的字段以及字段的命名都是一致的,才可以“验证签名成功”。

例如:前端使用如下的方式调起支付那么后端生成签名的时候也是需要这些参数,并且是区分大小写的来生成签名

                                         

            后端:生成签名,其中timeStamp需要的是10位的时间戳

                                         

到此:前后端的签名才验证成功,JSAPI即可成功调起支付。

 

H5支付、NATIVE支付:

一、配置时,H5支付配置上支付域名、NATIVE支付配置上支付回调即可。产品中心——开发配置中设置

                               

二、调用“统一下单”接口

H5支付:调用统一下单接口时,交易类型trade_type=MWEB即可,此时会返回一系列的参数,前端会用这些参数去调起支付,之后用户只需要输入密码,即可完成支付。

返回的参数:

                            

                            其中mweb_url 就是H5支付返回给前端的路径,前端做处理调起支付即可。

NATIVE支付:调用统一下单接口时,交易类型trade_type=NATIVE即可。

返回的参数:

                            

                            其中code_url就是NATIVE支付返回给前端的二维码图片,展示后直接扫码支付即可。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值