ALIN10146,ALI38173支付宝APP支付集成时出现的问题

2019-09-22 07:37:44

参考地址 支付宝APP集成时的ALI64和ALI38173的解决方案

重点可参考 ALIN10146-自查方案

最近在做支付宝APP的集成,遇到了一堆问题。百度不到,ALI64还好点,ALI38173基本上就没了。

我也是测试了很久才解决的。

ALI64的解决方案是因为要对私钥有问题。

ALI38173是签名有问题。

签名的解决方案是对URL里所有的值都加上双引号,然后再进行RSA的加密签名。

最后签名需要用URLEncoder进行编码一下

最后生成的结果像下面这样的

复制

body="test"&_input_charset="UTF-8"&it_b_pay="1d"&total_fee="1"&subject="test"&notify_url="http://www.bejson.com/api/alipay/testpayotify.php"&service="mobile.securitypay.pay"&seller_id="cw@bejson.com"&partner="2088301"&out_trade_no="2088301971894011"&payment_type="1"&show_url="http://www.dcloud.io/helloh5/"&sign="RtUKAGMfelb5sl2az4YKhxst051l94FSkpk9xoD91Hbpr2PKnWjHIafTWqNLyxGibde%2BKwcq9Y8cDN0qU%2FsO6hXjch0B4GaMJHBxZQM%2FnJK2YGxPPOWFKKL5rBKVJ%2BrX4OImfSQIyKKUpAEFG6uFfek2hh%2FPFJSXk2Phvmrb8U%3D"&sign_type="RSA"


java代码:

生成参数串:

复制

 public static String createLinkString(Map<String, String> params) {        List<String> keys = new ArrayList<String>(params.keySet());        String prestr = "";        for (int i = 0; i < keys.size(); i++) {            String key = keys.get(i);            String value = params.get(key);            if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符                  prestr = prestr + key + "="" + value+""";            } else {                prestr = prestr + key + "="" + value +"""+ "&";            }        }        return prestr;}


根据参数传生成签名串,这里的privateKey是进行pkcs8格式转换后取出首尾、空格换行后的字符串:

复制

public static String sign(String content, String privateKey) {	try {		PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(				Base64.decode(privateKey));		KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);		PrivateKey priKey = keyf.generatePrivate(priPKCS8);		java.security.Signature signature = java.security.Signature				.getInstance(SIGN_ALGORITHMS);		signature.initSign(priKey);		signature.update(content.getBytes(DEFAULT_CHARSET));		byte[] signed = signature.sign();		return Base64.encode(signed);	} catch (Exception e) {		e.printStackTrace();	}	return null;}


  • 2020-03-14 23:39:59

    vuetify和@nuxt/vuetify icon 之我见

    vuetify中v-icon,貌似默认支持 Material Design Icons, Material Icons, Font Awesome 4 and Font Awesome 5, 我自己单独引入了vuetify 用哪一个图标都没有问题。但是用了@nuxt/vuetify只能用mdi-home这样的。不知道因为啥。肯定是封装后,封装成一个了。 但是我修改vuetify的设置,哪一个图标也都能用。哎,不过多研究了。

  • 2020-03-16 15:57:53

    nuxtjs中单独引入Message组件的问题

    // 引入elementUIimport { Message } from 'element-ui';//由于Message组件并没有install 方法供Vue来操作的,是直接返回的,因此按照官方文档单独引入的方法是//会报错的,需要给 Message 添加 install 方法Message.install = function (Vue, options) {Vue.prototype.$message = Message}Vue.use(Message )//消息提示

  • 2020-03-16 16:03:20

    css的var()函数

     随着sass,less预编译的流行,css也随即推出了变量定义var函数。var()函数,就如同sass和less等预编译软件一样,可以定义变量并且进行对应的使用。

  • 2020-03-16 16:52:05

    对icomoon的误解,以及最快速的使用

    此时需要注意顶部第一个选项,Quick Usage,一定要打开,Enable Quick Usage,谁让咱英语不好呢,这个时候会出现一个css连接,直接引用就好了,就可以随意使用图标了,引入这一个css就能实现我们的功能,省区引入太多文件的烦恼,你可以在浏览器打开这个css,可以看到里面把我们所用的文件整成base64了。所以挺好用的。

  • 2020-03-17 09:47:05

    video标签视频不自动播放的问题

    添加 muted 属性,就可以通过地址栏进入网页的时候自动播放了,手机端还是有的有限制的,比如iphone浏览器,就不行,苹果手机为了保护用户的流量和用户的意愿,是禁止自动播放的,必须有手动触发。

  • 2020-03-17 14:21:31

    nuxt+pm2 自动化部署及打包后文件自动上传阿里云 oss(精华)

    部署nuxtjs,这一篇文章就够了,pm2 代码自动发布依赖于 git 工具,先将 ssh 密钥配置再你的代码仓库(github 或者 gitLab),具体操作自行 google 或者点击github 配置 ssh。 使用 ssh 密钥链接服务器 s $ ssh-copy-id root@1.2.3.4 # 把本机的 SSH 秘钥添加至服务器,配置成功后,以后就不需要再执行这条 SSH 命令了

  • 2020-03-18 21:15:34

    使用canvas画布解决百度地图自定义图层全球连续显示问题

        基于百度地图的Web API进行自定义图层叠加时,默认的图层只能叠加到全球范围以内,即经度范围为[-180, 180],而无法将图层叠加到默认的全球范围以外,即经度范围超出了[-180, 180]之后,经纬度坐标会自动回归到(0, 0),而导致在地图拖拽时全球以外无法连续显示想要的图层,此时可以基于百度地图的自定义图层将经纬度坐标转为像素点使用画布canvas来解决该问题。解决后效果如下图所示: ———————————————— 版权声明:本文为CSDN博主「宏伟杰作」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u011284073/article/details/80549950