小程序接入微信支付,你可能会遇上这些坑,微信小程序支付流程

来源:未知 浏览 146次 时间 2021-06-14 09:17

微信支付于 2013 年正式发布一路走来内测团队能明显感觉到SEO排名服务内测团队能明显感觉到微信支付的接口稳定程度有质的提升围绕支付相关的场景也配备了对应的接口。

 

小程序接入微信支付,你可能会遇上这些坑

 

 

 

小程序接入微信支付,你可能会遇上这些坑

 

我们先总览微信支付的一些基本情况。微信支付有以下支付模式:

微信客户端内的网页支付 (JSAPI)

扫码支付 (PC 端移动支付终端)

刷卡支付 (支付终端扫描)

app 支付 (iOS, Android)

各种支付交互流程可通过微信支付文档进行查看在此不赘述

 

1. 支付发起

 

所有支付方式都需要通过 「统一下单」的 API 来获取一个支付凭证。

但在小程序内测期间还没有「统一下单」的概念。HTML 5 应用发起支付需要直接通过前端构造参数来发起(不经过后端验证)很容易造成支付凭证泄露等安全问题。

 

为此微信支付将其流程进行了优化:在所有支付场景中插入「统一下单」的特性。推荐开发者在后端完成支付参数的构建等行为。

 

该优化带来以下好处:

尽可能让开发者不犯低级错误造成财务损失。

简化构造支付参数的复杂度所有支付方式可共享一个支付后端接口。

 

通过「统一下单」获取到相对应 prepay_id 或者 code_url 等参数即可通过各种支付模式的 SDK 来进行微信支付的发起。

 

2. 支付结果接收

 

微信支付发起完成后微信还需要提供一个通知系统以便及时让应用知道用户已经完成支付进行下一步的业务操作。

 

通知方式为一个 POST 请求payload 为支付的状态信息以及支付订单信息。

 

需要注意的是必须对通知参数进行签名验证以确保安全。

 

进行签名验证时除去签名字段(一般参数名为:sign)不需要参与签名外其余所有接收到的参数均需要参与签名。

 

3. 周边接口

 

通过 「支付发起」、「支付结果接收」即可完成一个简单的微信支付系统。当然微信还提供以下接口:

查询订单

取消订单

申请退款

查询退款

下载对账单

具体使用可以参考微信支付文档根据自身业务情况适当的进行采用。

 

 

在开发过程中容易掉进去的一些坑。

 

1.支付凭证

 

小程序的微信支付需要单独去申请SEO排名服务容易掉进去的一些坑。

 

1.支付凭证

 

小程序的微信支付需要单独去申请因为小程序是有独立的 appid不能使用以前的支付账户。

 

即使是全网发布也不能SEO排名服务不能使用以前的支付账户。

 

即使是全网发布也不能因为小程序不是一个 HTML 5 应用。

 

2. 统一下单参数

 

统一下单时需要注意将 trade_type 设置为 JSAPI同时 openid 需要使用与小程序相关联的 openid。

 

3. 签名方式

 

微信公众文档有很多 SHA1, MD5 的签名要求微信支付相关的签名暂时都是使用 MD5。

 

小程序端在发起微信支付的时候是通过以下方式来进行发起:

 

 

按照微信文档签名的要求参与签名的字段应该为:

timeStamp

nonceStr

package

signType

 

OK按照签名算法得到的签名去发起支付居然提示失败了。

 

经过与微信对接人员沟通后参与签名的字段还需要加上appId。

 

对这样的结果我表示不服随即我翻阅了微信支付所有文档终于在微信 JSSDK 的文档中找到一行备注。

备注:prepay_id 通过微信支付统一下单接口拿到paySign 采用统一的微信支付 Sign签名生成方法注意这里 appId 也要参与签名appId 与 config 中传入的 appId 一致即最后参与签名的参数有 appId、timeStamp、nonceStr、package、signType。

4. timestamp 类型

 

小程序端发起微信支付的方式已经贴在上面了但没那么简单继续贴文档说明。

 

timeStamp DateInt 时间戳从 1970 年 1 月 1 日 00:00:00 至今的秒数即当前的时间。

文档告诉我们 timeStamp 应该带着 int 类型传入。

 

后来前端就过来问我们:你们后端参数是不是有问题!提示 timeStamp 不存在了都?经过排查传入的 timeStamp 的值类型应该为 String。

 

结语

 

总体上小程序接入微信支付还是比较简单的没有过多复杂的设置。

 

标签: 支付签名微信参数