一、参数说明
登陆微信开放平台(注意是开放平台,不是公众平台);https://open.weixin.qq.com
做app首先需要在微信开放平台后台创建应用,第二步勾选ios和Android应用平台,其中Android应用需要填写应用签名、应用包名,重点就在与如何获取应用包名、应用签名。(审核和开通方式教程)
应用包名:就是Hbuilder中打包时填写的Android包名;
应用签名:
如果用的是DCloud公用证书,则应用签名为:"59201cf6589202cb2cdab26752472112"(全小写)
如果是自有证书,获取应用签名方法:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5 参考:Android开发要点说明->第一步(后台设置)。
也可以自己配置证书,在网上搜索android.keystore证书配置教程,app打包时候选择此证书即可
下图是微信中的配置,注意看红框中的描述
二、DCloud官网支付配置
官方的支付配置有很多重点都没说明,但是下面的参考实例代码还是有用的。其中的appid就是开放平台的appid。
注意:获取的支付通道每种包含三个字段:id、description、serviceReady。serviceReady是用来判断支付通道服务是否安装,对于支付宝可以通过wap页面支付,因此值固定为true;然而微信支付则依赖微信客户端,如果设备上未安装微信客户端则serviceReady值为false,此时应该提示用户安装微信客户端才能进行支付操作。(官网文档)
三、流程
流程与支付宝app支付类似。(业务流程、Android开发步骤说明)
1.app发起支付申请,请求服务器向微信发起预付单处理;(微信统一下单)
2.请求成功后,对预付单进行签名并返回json数据给app;(处理并签名之后的参数:调起支付参数)
3.app拉起微信支付;
4.支付成功后异步通知服务器支付结果;
5.app中进入订单支付结果页面(这里数据重新与服务器确认是否支付成功)
四、问题解决
肯定会碰到的问题:支付失败:-100[100]:[payment微信:-1]General errors,肯定是配置出现错误了,微信不会提醒你错误在哪的
1. 检查参数:
a.确认开放平台的 appid、mac_id、key、Appsecret 与服务器中的配置一样。(公众号中NOTIFY_URL 是需要匹配才能回调,开放平台好像不需要)
b.app只需要配置微信appid即可。
c.确认app中的"应用包名"与微信中配置一样;
d.再次检查微信配置中的"应用签名"是否按规定获取的。!!!!(签名通过一个app获取,参考上面文档,确认是否填的正确值)
2. 如果是刚修改过微信配置中的应用签名,则需要等待几分钟甚至更久才能测试成功
3. 确认服务器向微信发起预付单处理,返回的参数没有错误(说明签名方式没错,所有签名方式都需要按同一种方式执行)
4. 在app端查看服务器传回来的参数是否缺少或者有错误(参考 调起支付参数 严格对比字母大小写)
可以将自己的返回信息和上面的进行对比,发现是一样的,都是7个参数,且参数都一样
注:有的时候,第一次拉取成功了,但是并没有支付而是返回了,然后再拉取的时候会报错,因为订单号重复了,这时候有抓包的工具的话,是可以看到prepayid是null,因为预订单是有时效的,这个需要自己在做一下判断。
还有一个注意点:plus.payment.request发起支付的时候,接收到的参数是json格式的字符串而不是对象,这点要注意一下,因为我封装了ajax请求,默认将json格式转为对象,所以在用的时候要将参数再转为字符串
mui中查看错误信息比较麻烦,参考做法是:console.log(JSON.stringify(result)); 转为输出json字符串
开发指引
支付插件配置 - DCloud问答支付插件配置 - plus的支付API,支持支付宝App支付(移动快捷支付)、微信支付和苹果的IAP应用内支付。配置参数需要提交云端打包后才能生效,如果需要真机运行生效请使用自定义基座 开发指导传统支付流程如下:如果使用uniCloud,则搭配uniPay会大幅简化...https://ask.dcloud.net.cn/article/71实力解决微信支付问题~ - DCloud问答实力解决微信支付问题~ - 关于微信支付的时候,一直提示-1的问题,我也是整理了半天,才弄出来个原因, 首先,准备工作要做好,要保证:1、menifest.json中配置了微信的appid2、服务端请求prepareid正确返回;3、服务端返回数据格式与官方一致:4、an...https://ask.dcloud.net.cn/article/34913