华为SDK接入时各种签名烦不胜烦,官方文档没有详细的DEMO,和调试工具,调试起来很吃力。踩了很多的坑最终才校验通过。

1、校验登录签名
参数:

        public function callGameLoginService(){$apiParams['appId'] = $this->appId;$apiParams['cpId'] = $this->cpId;$apiParams['playerId'] = $this->playerId;$apiParams['playerLevel'] = $this->playerLevel;$apiParams['playerSSign'] = $this->playerSSign;$apiParams['private_key'] = $this->private_key;$apiParams['public_key'] = $this->public_key;$apiParams['ts'] = $this->ts;$apiParams['method'] = 'external.hms.gs.checkPlayerSign';$url = 'https://gss-cn.game.hicloud.com/gameservice/api/gbClientApi';//构造源串$key_string = $this->getSignContent($apiParams);//获取签名$apiParams['cpSign'] = $this->rsasign($key_string,$apiParams['private_key']);Yii::error('tstststststststs+++++++++::'.$apiParams['playerSSign']);$resp = json_decode($this->curl($url, $apiParams),true);if($resp['rtnCode'] == 0){//验证签名成功,保存更新用户信息}else {return json_encode(['code'=>1,'msg'=>'验证签名失败!']);}}

a、构造源串

protected function getSignContent($params) {ksort($params);//先排序$stringToBeSigned = "";$i = 0;foreach ($params as $k => $v) {if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) {// 转换成目标字符集$v = urlencode($this->characet($v, "UTF-8"));//最好转化一下编码,每个参数必须urlebcodeif ($i == 0) {$stringToBeSigned .= "$k" . "=" . "$v";} else {$stringToBeSigned .= "&" . "$k" . "=" . "$v";}$i++;}}

生成的源串格式如:method=external.hms.gs.checkPlayerSign&appId=10000&cpId=1000&ts=1350539672156&playerId=100&playerLevel=10&playerSSign=VUOoWexHeQC98OFHyWapgKSACDwBgEHWb6IvPutKO0Z/wSVU3SDoK7/vnaLsYte6cYJu/RVWxoGh8lJfHuMoMucKutoNEXnAnPgTG5cfXf79DCtTnhMJ3lHBjaYFD03RWb2XBRKlnF7m455DeU2bvPZOsi7BhTDNPD0bTxY7PWlASLCSX7C7WqHN4/AWxDiU+ki2pPBstuSDecoUQQATBU35bQE2V7DtOsoGAhseuKXZe7yExMqszyZHLKaaqsbqq1rCua6FvJtwlwO82eY7N5kyW29r3MQ/uW1XGh4aPDods9UfD90BSLoPPmLjV9tREX/HFIdxkZ3FVWbkcWR4YQ==

b、构造签名

    protected function sign($data, $cpAuthKey) {$res = "-----BEGIN RSA PRIVATE KEY-----\n" .wordwrap($cpAuthKey, 64, "\n", true) ."\n-----END RSA PRIVATE KEY-----";openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA256);$sign = base64_encode($sign);return $sign;}

需要注意的是参与签名的私钥如果是写在配置中则不能换行,必须是完整的一行,否则会报错,如果是引入文件则不需要。

二、构造支付pay接口的sign

需要用到的参数:

                     $apiParams = array('productName' => $prod->product_name,'productDesc' => $prod->product_desc,'merchantId' => $config['merchantId'],'applicationID' => $config['appId'],'amount' => sprintf('%.2f',$prod->price),'requestId' => $model->orderid,'country' => $config['country'],'currency' => $config['currency'],'sdkChannel' => $config['sdkChannel'],'urlver' => '2','url' => $config['url']);

这些参数的参数值必须和客户端的完全一致。

a、构造源串,这里构造源串和登录时有些不同。

     protected function getSignContent($params) {ksort($params);//排序$stringToBeSigned = "";$i = 0;foreach ($params as $k => $v) {if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) {// 转换成目标字符集//$v = urlencode($this->characet($v, "UTF-8")); 不需要urlencodeif ($i == 0) {$stringToBeSigned .= "$k" . "=" . "$v";} else {$stringToBeSigned .= "&" . "$k" . "=" . "$v";}$i++;}}

b、签名

protected function sign($data, $cpAuthKey) {$res = "-----BEGIN RSA PRIVATE KEY-----\n" .wordwrap($cpAuthKey, 64, "\n", true) ."\n-----END RSA PRIVATE KEY-----";openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA256);$sign = base64_encode($sign);return $sign;}

签名方法没什么大的区别,需要注意的是这里的私钥是支付私钥

华为联运服务登录支付签名相关推荐

  1. android华为登录云服务,华为云服务登录网页版

    华为云服务登录网页版是一款专为华为手机用户打造的相册管理安全储存软件,拥有一键快速恢复删除照片,安全下载查看图片,实时云端同步保存,赶紧下载体验一下吧. 华为云服务登录网页版特色 [轻松查找照片] 智 ...

  2. cloud华为云服务登录(华为云服务平台登录入口)

    想从荣耀6换到华为荣耀7,华为云服务需要重新登录吗?会自动同步吗? 有两种方法,其一是使用华为的一个APP叫手机克隆,一键迁移手机的所有数据,而且IOS和EMUI系统的手机也是无缝连接,其二是登陆华为 ...

  3. 华为智能家居app未能连接上远程云服务_华为云主机远程连接不上 华为云服务登录手机版...

    华为企业云主机如何远程? 1.从华为企业云的控制台进入获取默认的服务器账号和密码(华为企业云也会主动发送给你账户密码),完成后,再登录服务器. 2.windows系列的,使用开始运行-&gt ...

  4. 华为联运游戏或应用审核驳回:在安装了低于2.5.3版本的华为移动服务手机上调用支付无法拉起升级提示

    问题描述 项目集成了华为HMS Core SDK 4.x版本的IAP等服务,提交审核后,华为驳回:应用在安装了低于2.5.3版本的华为移动服务手机上启动或调用支付时无法拉起升级提示. 问题复现手段 找 ...

  5. 【HMS Core 6.0全球上线】华为钥匙环服务,打造跨应用跨形态无缝登录体验

    华为钥匙环服务(Keyring),是HMS Core在安全领域开放的全新服务,为全球开发者提供用户认证凭据(以下简称"凭据")本地存储和跨应用.跨形态共享能力,帮助您在安卓应用.快 ...

  6. 华为机器学习服务活体检测再升级,构建安全友好的交互式体验

    人脸识别技术被广泛应用于公共安全.金融支付.交通安全等领域.使用较多的场景是用户通过智能手机上的人脸识别技术完成解锁.支付等动作,俗称"刷脸",还有一些开发者会在应用中集成人脸识别 ...

  7. 接入华为联运 / 小米联运 怎么测?

    华为联运:开发说 会让华为用户搜索我们app时排名更靠前 那么小米联运 也是同样的道理 测试点.需要关注的地方 1.首先得要有登录吧 华为版本: 1.这个登录按钮 如果有其他方式(微信/qq/手机号等 ...

  8. 华为账号服务内容讲解

    华为账号服务内容讲解 1.业务简介 华为帐号服务(HUAWEI Account Kit)为您提供了简单.安全的登录授权功能,方便用户快捷登录.用户不必输入帐号.密码和繁琐验证,就可以通过"华 ...

  9. 华为服务器如何登录修改密码,如何修改云服务器的登录密码

    如何修改云服务器的登录密码 内容精选 换一换 本节为您介绍如何通过控制台提供的远程登录功能(即VNC方式)登录到弹性云服务器上.登录成功后,如需使用VNC界面提供的复制.粘贴功能,请参见后续处理.对于 ...

最新文章

  1. 基于深度神经网络的风电场超短期功率预测系统【数据故事计划最佳学术奖】...
  2. 语义分析的一些方法(上篇)
  3. 有服务器风扇声音对胎儿有影响吗,大噪音对胎儿的影响
  4. DCMTK:用于DICOM数据字典的哈希表接口
  5. sphinx4 FrontEnd流程分析
  6. Leetcode1143. 最长公共子序列(c#)
  7. 【转来警醒自己】最近的一些面试感悟
  8. 51Nod 1003 阶乘后面0的数量 | 思维
  9. git根据用户过滤提交记录
  10. 【转】Windows系统中ckplayer视频边下边放,视频转码mp4及last atom in file was not a moov atom问题...
  11. POJ 1094 拓扑排序
  12. lua-获取当前时间
  13. Linux学习笔记08—如何关闭防火墙
  14. dbeaver连接Oracle数据库
  15. 2017年度优秀软件工程造价师等评选通知
  16. java单循环赛制程序_单循环比赛的固定轮转编排法与贝格尔编排法
  17. 新装主机测试性能软件,装机必看 如何快速测试电脑性能?
  18. smtp发送QQ邮件
  19. 大一第一学期总结:既然选择了远方,便只顾风雨兼程
  20. 华为电脑Linux进pe,华为 matebook X Pro怎样用PE重装系统win10

热门文章

  1. matlab环境下的yalmip+cplex的安装过程
  2. JAVA:实现Juggler Sequence杂耍者序列算法(附完整源码)
  3. 串口通信,IIC通信,SPI通信的简单区别
  4. 阿里云字体图标的引用
  5. 怒我直言你绝对不知道这些硬核的工具
  6. 阿松和阿柏无事闲聊互道岁月不饶人
  7. 寝室多设备连接校园网的解决方案
  8. 【活动】DevOps直播技术架构养成记
  9. /lib64/libstdc++.so.6: version `CXXABI_1.3.8’ not found
  10. 抛出异常和捕获异常_多捕获和最终重新抛出的异常处理