PHP集成Telenor EasyPay:哈希算法选型及无效请求问题咨询
解决Telenor EasyPay集成中的「invalid request」错误及PHP哈希实现方案
我之前帮几个开发者处理过Telenor EasyPay的集成问题,你遇到的「invalid request」大概率就是因为缺少正确的请求签名(哈希验证)。针对EasyPay的要求,你需要使用SHA-256哈希算法来生成请求签名,这是他们官方指定的标准算法。
下面给你梳理PHP里的具体实现步骤,确保你能快速搞定:
整理并排序请求参数
首先要把所有要发送的请求参数(除了签名本身)按照参数名的ASCII升序排序,比如参数amount、order_id、timestamp,要排成amount→order_id→timestamp的顺序。这一步很关键,因为网关那边会用同样的顺序验证,顺序不对签名肯定不匹配。拼接参数与密钥
把排序后的参数按照「参数名=参数值」的格式拼接成一个字符串,然后在末尾追加你的EasyPay商户密钥(测试环境和生产环境的密钥是不同的,别搞混了)。比如:amount=1000&order_id=ORD12345×tamp=1699999999your_secret_key生成SHA-256哈希值
在PHP里用hash()函数生成SHA-256哈希,注意要输出小写的十六进制字符串(这是EasyPay要求的格式)。代码示例:// 假设你的参数数组 $params = [ 'amount' => '1000', 'order_id' => 'ORD12345', 'timestamp' => time(), 'merchant_id' => 'YOUR_MERCHANT_ID' ]; // 按参数名升序排序 ksort($params); // 拼接成字符串 $stringToHash = ''; foreach ($params as $key => $value) { $stringToHash .= $key . '=' . $value; } // 追加商户密钥 $stringToHash .= 'YOUR_EASYPAY_SECRET_KEY'; // 生成SHA-256哈希 $signature = hash('sha256', $stringToHash); // 把签名加入请求参数 $params['signature'] = $signature;额外注意事项
- 测试环境和生产环境的密钥、商户ID要严格区分,不要混用;
- 如果参数值为空字符串,要不要包含进拼接字符串?建议参考EasyPay官方文档,一般是忽略空值参数;
- 确保请求时的编码是UTF-8,避免因字符编码问题导致哈希不匹配;
- 发送请求时,要把所有参数(包括生成的
signature)一起提交给EasyPay服务器。
按照这个步骤处理后,应该就能解决「invalid request」的问题了。如果还是有问题,可以检查参数排序是否正确、密钥是否输入正确,或者有没有遗漏必填参数。
内容的提问来源于stack exchange,提问作者Muhammad Ismail
相关产品推荐
相关产品推荐

