PHP集成HDFC/Payu支付网关问题:无法添加自定义参数
解决Payu/HDFC支付网关添加自定义参数的问题
看起来你现在的代码是用于验证支付状态的verify_payment命令,但自定义金额、姓名、邮箱这些参数是需要在发起支付请求的时候传递的,不是验证环节哦!下面帮你理清楚两个环节的正确做法:
一、发起支付请求(添加自定义参数的核心步骤)
当用户要触发支付流程时,你需要构造包含金额、用户信息的请求参数,同时生成符合Payu要求的签名——这才是添加自定义参数的关键环节:
// 商户基础信息(Payu官方提供) $key = "gtKFFx"; $salt = "eCwWELxi"; // 支付核心必填参数(可自定义内容) $txnid = uniqid(); // 生成唯一交易ID,自己确保不重复即可 $amount = "199.99"; // 自定义支付金额 $productinfo = "年度会员订阅"; $firstname = "张三"; // 用户姓名 $email = "zhangsan@example.com"; // 用户邮箱 $phone = "13800138000"; // 用户手机号 $surl = "https://你的域名.com/payment-success.php"; // 支付成功回调地址 $furl = "https://你的域名.com/payment-failure.php"; // 支付失败回调地址 // 生成签名的字符串(注意参数顺序绝对不能错!) $hash_str = $key . '|' . $txnid . '|' . $amount . '|' . $productinfo . '|' . $firstname . '|' . $email . '||||||||||' . $salt; $hash = strtolower(hash('sha512', $hash_str)); // 构造支付请求参数(支持添加Payu官方允许的自定义字段) $paymentParams = [ 'key' => $key, 'txnid' => $txnid, 'amount' => $amount, 'productinfo' => $productinfo, 'firstname' => $firstname, 'email' => $email, 'phone' => $phone, 'surl' => $surl, 'furl' => $furl, 'hash' => $hash, // 用Payu提供的udf1-udf5存额外自定义信息,比如用户ID、订单备注等 'udf1' => '用户ID:1001', 'udf2' => '订单备注:加急处理' ];
接下来把这些参数通过表单POST提交到Payu的支付网关(测试环境地址是https://test.payu.in/_payment),示例表单代码:
<form method="post" action="https://test.payu.in/_payment"> <?php foreach($paymentParams as $paramKey => $paramValue): ?> <input type="hidden" name="<?php echo $paramKey; ?>" value="<?php echo $paramValue; ?>"> <?php endforeach; ?> <button type="submit">前往Payu完成支付</button> </form>
二、关于你现有的验证代码
你当前的代码是用来验证已完成支付的状态的,这个环节不需要传递金额、姓名这些参数,只需要交易ID、商户key、salt和命令即可。如果需要获取用户信息,在支付成功后,Payu会把你发起支付时传递的所有参数(包括udf1-udf5)同步返回给你的回调地址,你可以在回调页面直接接收处理。
几个关键注意点
- 签名生成的参数顺序必须严格遵循Payu文档要求,顺序错了签名会直接验证失败
- 测试环境和生产环境的网关地址不同,上线前要记得切换
- 自定义信息优先用Payu官方提供的
udf1到udf5字段,不要随意添加未声明的自定义字段 - 交易ID(txnid)必须保证唯一,不能重复使用
内容的提问来源于stack exchange,提问作者TestC
相关产品推荐
相关产品推荐

