坑爹的支付宝小程序

原创
02/24 08:43
阅读数 47

坑爹的支付宝小程序

首先,吐槽一下支付宝的文档,我只有三个字:WTF

##. 授权弹窗两次。

这很大程度是文档的问题。根据文档,应该这样实现(uniapp写法):

<button type="default" open-type="getAuthorize" @getAuthorize="onGetAuthorize" @onError="onError" scope="userInfo" @tap="cancel" :plain="true" withCredentials="true">登录</button>

// script:
async onGetAuthorize(res) {
	my.getOpenUserInfo({
		success: (resp) => {}
	})
}

但这样拿不到authCode,每个小程序都应该要拿authCode吧,否则要获取用户的信息也没有用啊。如果你要拿到authCode,就必须调用

	my.getAuthCode({
		scopes: ['auth_user']
	})

然后,代码可能是像这样的:

async onGetAuthorize(res) {
	my.getAuthCode({
		scopes: ['auth_user'], // 不弹窗
		success: (res) => {
			// res.authCode
			my.getOpenUserInfo({
				success: (resp) => {}
			})
		}
	})
}

这样,就会出现两次授权弹窗。

解决方案:

支付宝也提到了这个问题,不过是在某个角落中:https://opendocs.alipay.com/mini/introduce/authcode#scopes%20%E5%88%97%E8%A1%A8

就是把 auth_user 改成 auth_base:

async onGetAuthorize(res) {
	my.getAuthCode({
		scopes: ['auth_base'], // 不弹窗
		success: (res) => {
			// res.authCode
			my.getOpenUserInfo({
				success: (resp) => {}
			})
		}
	})
}

后台:混乱的execute和certificateExecute

各种花样的execute 。。。。

理论上,证书登录和公私钥登录安全级别是相同的,不知道为啥非要区分公钥和证书。。。

小程序后台可以配置接口加签方式:使用公私钥或者证书。

如果使用公私钥,那所有地方都要统一使用公私钥,例如获取用户信息,支付,等等;如果使用证书,那么在所有地方都要使用证书的方式。

***切记:不能使用不同的加签方式,否则你会被各种签名报错折磨而死。***例如:

{"error_response":{"code":"40002","msg":"Invalid Arguments","sub_code":"isv.app-cert-not-exist","sub_msg":"应用公钥证书不存在"}}^_^25ms,389ms,21ms

{"code":"40002","msg":"Invalid Arguments","sub_code":"isv.invalid-signature","sub_msg":"验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配

接口加密

小程序后台有一个接口加密,千万不要手贱点生成秘钥,因为一旦你点了,就没法取消。。。。

此外,接口加密也是脱了裤子放屁,接口都已经是https了,还要再加密???

域名白名单及 https

  1. 首先是测试环境也需要https

不知道支付宝怎么想的,反正我觉得很麻烦

  1. 域名白名单

在测试环境测试时,不校验白名单;提交审核上线时,就必须调用白名单内的域名。因为这个问题,折磨我半天

综合以上两点,我建议直接使用frp做转换,开发测试都在同一个域名下,测试用一个测试的二级域名,而且一开始就把域名配置好。

蓝牙与微信小程序的不同

  1. 连接的方法不同
  • 连接设备,微信小程序: createBLEConnection 支付宝:connectBLEDevice
  • 断开连接,微信小程序:closeBLEConnection 支付宝:disconnectBLEDevice
  1. serviceId 和 characteristicId
  • 微信的字段是uuid,支付宝services的字段是serviceId和characteristicId
  • 微信的 serviceId 和 characteristicId 都是大写,支付宝的都是小写
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部