集成QQ钱包---踩坑

博客转移到个人站点:http://www.wangchengmeng.club/2018/02/01/%E9%9B%86%E6%88%90QQ%E9%92%B1%E5%8C%85—%E8%B8%A9%E5%9D%91/

欢迎来吐槽

很多在在做支付宝支付,微信支付的时候都会踩到各种坑,但,踩的人多了后面的人就越发的顺利,现在做支付宝和微信支付很顺利的就完成,但是,QQ钱包我相信很多人很多项目都不会集成进去吧,我就遇到个这么需求,做了这么多支付的我本来是很简单的就完成了客户端部分,并且按照demo在客户端进行签名并唤起了QQ,ok。成功,但,签名大家都知道是在服务端签名,接下来坑就来了。

坑1:
那句要属QQ钱包的开发文档了,
https://qpay.qq.com/qpaywiki/showdocument.php?pid=38&docid=165这里是Android集成文档,你会在最下面看见:这里写图片描述
这才是应该用到的签名,但是被放在了android文档下面,后台哥们儿咋个找得到,所以搞成了支付签名(统一下单里面),所以一直报签名错误,好不容易才联系到了QQ钱包团队,捣鼓了半天,说了各种问题,签名错误请核对:appid,appkey(记住,唤起钱包的签名一定是用的appkey),和签名算法,qq钱包要求HMAC-SHA1,不是MD5,所以不要搞错。似乎知道了这个文档坑后QQ钱包那边的人应该去修改文档去了。

客户端签名的代码:

/**
 * 签名步骤建议不要在app上执行,要放在服务器上执行.
 */
public void signApi(PayApi api) throws Exception {
    // 按key排序
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("appId=").append(api.appId);
    stringBuilder.append("&bargainorId=").append(api.bargainorId);
    stringBuilder.append("&nonce=").append(api.nonce);
    stringBuilder.append("&pubAcc=").append("");
    stringBuilder.append("&tokenId=").append(api.tokenId);

    byte[] byteKey = (APP_KEY+"&").getBytes("UTF-8");
    // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
    SecretKey secretKey = new SecretKeySpec(byteKey, "HmacSHA1");
    // 生成一个指定 Mac 算法 的 Mac 对象
    Mac mac = Mac.getInstance("HmacSHA1");
    // 用给定密钥初始化 Mac 对象
    mac.init(secretKey);
    byte[] byteSrc = stringBuilder.toString().getBytes("UTF-8");
    // 完成 Mac 操作
    byte[] dst = mac.doFinal(byteSrc);
    // Base64
    api.sig = Base64.encodeToString(dst, Base64.NO_WRAP);
    api.sigType = "HMAC-SHA1";

}

注意:appkey作为密钥加密,一定要在末尾加上&,否则签名失败,所有的编码都是UTF8,pubAcc为空,但也必须要加入签名,客户端这个字段直接空字符串就ok。

签名参数:

    appId=100202178&bargainorId=1450091201&nonce=AG0ITTDFUQ7UQL9E&pubAcc=&tokenId=5V260ac571ecddafa9e0736b0a5edae6

服务端的哥们儿,一定要注意签名啊,算法,编码,参数,appkey作为密钥加密,都是要注意的点,否则客户端哥们儿会郁闷(因为我就是客户端的哥们儿,看完了服务端demo的各种代码,查找了各种文档(几乎没有相关文档),结果发现后台使用的是支付签名,坑得体无完肤)。

Android客户端:

1.导入jar包(去下载SDK https://qpay.qq.com/qpaywiki/showdocument.php?pid=38&docid=165

2.回调Activity:

注册:

    <activity
        android:name="cn.zymk.comic.ui.QQPayCallbackActivity"
        android:launchMode="singleTop"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:scheme="qwallet100802178"/>
        </intent-filter>
    </activity>

scheme格式:qwallet+appid,授权QQ的时候需要上传的参数
然后就是回调方法,直接拷贝demo中的即可。

授权上传参数:

PayApi api = new PayApi();

api.serialNumber = mQQPayBean.orderId; // 支付序号,用于标识此次支付

api.callbackScheme = “qwallet” + mQQPayBean.param.appId; // QQ钱包支付结果回调给urlscheme为callbackScheme的activity.,参看后续的“支付回调结果处理”

api.tokenId = mQQPayBean.param.tokenId; // QQ钱包支付生成的token_id

api.pubAcc = “”; // 手Q公众帐号id.参与支付签名,签名关键字key为pubAcc

api.pubAccHint = “”; // 支付完成页面,展示给用户的提示语:提醒关注公众帐号

api.nonce = mQQPayBean.param.nonce; // 随机字段串,每次支付时都要不一样.参与支付签名,签名关键字key为nonce

api.timeStamp = Long.valueOf(mQQPayBean.param.timeStamp); // 时间戳,为1970年1月1日00:00到请求发起时间的秒数

api.bargainorId = mQQPayBean.param.bargainorId; // 商户号.参与支付签名,签名关键字key为bargainorId

api.sig = mQQPayBean.param.sign; // 商户Server下发的数字签名,生成的签名串,参看“数字签名”

api.sigType = “HMAC-SHA1”; // 签名时,使用的加密方式,默认为”HMAC-SHA1”

if (api.checkParams()) {
mIOpenApi.execApi(api);
}

所有的参数最好是后台签名完成后一起返回给客户端。

其实中间还有一些服务端语言,编码相关的问题,描述不太清楚,后面踩到坑的人继续传播一下,因为关于集成QQ钱包的文章少之又少

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
集成学习是一种通过结合多个模型的预测结果来提升分类器或预测系统的效果的方法。在CIFAR-10数据集中,可以使用集成学习来提高图像分类的准确性。 引用中提到了CIFAR-10数据集是由10个类的60000个图像组成的,每个类有6000个图像。数据集被划分为5个训练批次和1个测试批次,每个批次包含10000个图像。其中测试批次包含了每个类别的1000个随机选择的图像,训练批次则以随机顺序包含剩余图像。因为每个批次中来自每个类别的图像数量可能不同,所以总体来看,5个训练批次包含了来自每个类别的5000张图像。 引用中提到了一种多Lora权值集成切换Zero-Finetune增强的跨模型技术方案,该方案旨在使语言模型能够以低能耗且广泛适用的方式进行集成。 引用中提到了模型集成的原理,类似于盲人摸象的比喻。每个盲人只能摸到大象的一部分,但是综合每个人摸到的部分,就能形成一个比较完整、复合实际的图像。在实际应用中,可以考虑各个模型之间的差异性和性能差异。如果模型的性能相差不大,可以取各个模型预测结果的平均值;如果模型性能相差较大,可以采用加权平均法。通过集成多个模型,可以得到一个强于单个模型的模型。 因此,在CIFAR-10数据集中,可以使用集成学习方法,如模型集成或权值集成,来提升分类器对图像的准确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [pytorch实现CIFAR-10多分类](https://blog.csdn.net/W1517055683/article/details/105863128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [实现一种多Lora权值集成切换+Zero-Finetune零微调增强的跨模型技术方案,LLM-Base+LLM-X+Alpaca](https://download.csdn.net/download/qq_35831906/88238087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值