一、微信Native支付方式的对接过程整理记录
最近开始尝试使用微信支付,现在已经是 V3版本,各种操作设置、证书真的是非常繁琐。看其官方文档现在已经可使用的支付形式包括JSapi、APP支付、H5支付、Native支付、小程序支付、合单支付、付款码支付。
我这里使用的是 Native 支付,基于PC网页的话,也只有Native支付可用,JSAPI支付在文档中倒也是写了支持PC支付,但是我看了一下文档调用用户需要提供 openid,但是在PC网页上用户是直接扫码发起支持,根本不存在能取到用户的 openid,觉得不可行。
之后在官方的一个回答中看到微信客服的一个回复,要在PC上使用网页支付,只能采用Native 支付方式。而采用Native支付也不是像以前那样简单的在本地生成一个订单,调用微信支付发起一笔支付要求,然后待用户支付成功后进行回调以及本地调用微信端进行一个验证确认的过程,现在上来要有一个 商户API证书 的东西。
商户API 地址: 微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式
这个商户API证书的获取挺麻烦,现在微信支付必须要以公司名义来注册,于是开始一个朋友发给我了一些相关的资料,我开始调用对接,但是碰到报各种问题,比如商户证书序列号有误。请使用签名私钥匹配的证书序列号,如下:
Client error: `GET https://api.mch.weixin.qq.com/v3/certificates` resulted in a `401 Unauthorized` response: {"code":"SIGN_ERROR","message":"商户证书序列号有误。请使用签名私钥匹配的证书序列号"} failed,resp code = 401 return body = {"code":"SIGN_ERROR","message":"商户证书序列号有误。请使用签名私钥匹配的证书序列号"}
调试了一段时间,现在也不记得太清楚,应该是提供的都是以前版本的一些 private.pem 和public.pem 成对的RSA加密密钥,还有一些序列号、商户号。但在调用的时候发现序列号有问题。报错:商户证书序列号有误。请使用签名私钥匹配的证书序列号,
{"code":"SIGN_ERROR","message":"商户证书序列号有误。请使用签名私钥匹配的证书序列号"}
] code=401, body=[{"code":"SIGN_ERROR","message":"商户证书序列号有误。请使用签名私钥匹配的证书序列号"}]
txt文档里面的序列号 和密钥 是一模一样的,是不是错了?
调试了一段时间,应该是缺少 apiclient_key.pem 这个文件,对这个文件使用 openssl 解密能得到序列号。即传递的序列号必须要与 apiclient_key.pem 这个文件解密出来的序列号一致,因为我不能直接在朋友微信后台来自己操作,没法来获取 apiclient_key.pem 这个文件,也没办法进行下一步。之后我登录微信支付后台,开始尝试进行了 商户API证书 的申请,就是上面的贴的操作地址。链接在这里: 商户API证书获取方法及功能介绍 - 腾讯客服腾讯客服成立于2002年,承接了腾讯集团的所有业务的海量用户服务,一直以来致力于依托先进的互联网技术,致力于通过建设多元化特色渠道,智能化解决用户问题,同时传递用户心声,助力产品优化体验,成为业界领先的互联网客服团队。https://kf.qq.com/faq/161222NneAJf161222U7fARv.html
需要下载一个客户端的证书工具WXCertUtil.exe,选择安装路径安装后运行,然后开始和网页上的 商户API证书申请 同步进行操作,从win客户端上生成的字符串复制到网页上,然后又是从网页上的东西复制到客户端上,最后在本地下载证书的压缩包。我也是第一次操作,感觉微信支付真的是挺麻烦。
总之这次通过 申请 得到了apiclient_key.pem 这个文件,微信发起支付的签名是通过验证了,但是因为这个朋友的微信支付到了年审的时候,未进行年审,所以收款功能目前是被限制的,我在调用的时候得到提示:此商家的收款功能已被限制,暂无法支付。商家可登录微信商户平台。补一句,前几天微信推送我消息让我进行一个个人小程序的验证,我按照其提示进行操作,到最后一步发现个人微信小程序认证也要花钱了,30元。而公司的微信认证是 300。并且都不以微信认证成功为收费标准。即只要进行一次认证,不管是否成功,都要收取费用。这钱收得可真是容易啊!
Client error: `POST https://api.mch.weixin.qq.com/v3/pay/transactions/native` resulted in a `403 Forbidden` response: {"code":"NO_AUTH","message":"此商家的收款功能已被限制,暂无法支付。商家可登录微信商户平台/ (truncated...) failed,resp code = 403 return body = {"code":"NO_AUTH","message":"此商家的收款功能已被限制,暂无法支付。商家可登录微信商户平台/微信支付商家助手小程序/经营账户页面查看原因和解决方案。"}
整个微信支付调用的代码我也不多贴出来,官网上都有,包括常用的 JAVA 代码和 PHP 代码。
二、微信小程序报错[ app.json 文件内容错误] app.json: @vant/weapp/field/index
运行一套微信小程序时报错:[ app.json 文件内容错误] app.json: ["usingComponents"]["van-field"]: "@vant/weapp/field/index", component not found in the path: E:/02.linge/test-program-mini/@vant/weapp/field/index
[ app.json 文件内容错误] app.json: ["usingComponents"]["van-field"]: "@vant/weapp/field/index", component not found in the path: E:/02.linge/test-program-mini/@vant/weapp/field/index
E:/02.linge/test-program-mini/@vant/weapp/field/index/index
E:/02.linge/test-program-mini/miniprogram_npm/@vant/weapp/field/index
E:/02.linge/test-program-mini/miniprogram_npm/@vant/weapp/field/index/index
E:/02.linge/test-program-mini/miniprogram_npm/@vant/weapp/field/index
E:/02.linge/test-program-mini/miniprogram_npm/@vant/weapp/field/index/index(env: Windows,mp,1.06.2503182; lib: 3.8.12)
报错截图如下:
根据报错提示,是找不到miniprogram_npm目录下的对应的扩展程序代码,在微信小程序项目中,安装运行编译前确保有一个有效的package.json文件。如果没有,可以通过在项目根目录执行npm init来创建一个新的package.json文件。示例如下:
{
"dependencies": {
"@vant/weapp": "^1.11.7",
"moment": "^2.29.4"
}
}
安装运行编译需要按如下步骤进行,首先是执行npm install命令;再进行小程序 构建npm;再进行编译。其会关联以下几个目录,它们的区别如下:
node_modules:在项目根目录下执行命令npm install,会根据package.json文件中的依赖列表,将所需的第三方包安装到node_modules目录中。
miniprogram_npm:在小程序开发工具中,点击菜单栏中的 工具->构建 npm,会自动将node_modules中的依赖复制到小程序根目录下的miniprogram_npm目录中。miniprogram_npm目录生成后,就可以编译运行小程序了。