将参数按照顺序组合 merchant=201905240200152433&orderAmount=10&orderId=bbb1561367503&outcome=yes&payMethod=2&payType=21&signType=MD5&version=1.0 拼接商户密钥 merchant=201905240200152433&orderAmount=10&orderId=bbb1561367503&outcome=yes&payMethod=2&payType=21&signType=MD5&version=1.09ED5F15DA1DA14A0F70052F4434F3936 然后md5得到sign参数的值 4641318824DB30EC3668CD727FCB4642
如果加密规则不是md5,那么就替换成需要加密的方式
$data = [ "orderAmount" => "50", //金额 "orderId" => time() . rand(1000, 9999),//订单号 "merchant" => '2021112801004572213', //商户号 新的账号 原来商户202111211223066429 'payMethod' => '1', //1.微信 2.支付宝 "payType" => "13",//21 "signType" => "MD5", "version" => "1.0", "outcome" => "yes", ]; 参与加密的参数 $key = 'DD1D847BA1B104F287FA896C4D85D4ED'; //key 新的账号 ksort($data);//函数对关联数组按照键名进行升序排序。 $postString = http_build_query($data);//返回一个 URL 编码后的字符串。 $signMyself = strtoupper(md5($postString . $key));生成需要验证的sign签名值
//#以PHP #语言为例: <?php $data = array( "orderAmount"=>"10", //金额 "orderId"=> time().rand(1000,9999),//订单号 "merchant"=>"", //商户号 'payMethod'=>'1', //支付方式 "payType"=>"11", //支付类型 "signType"=>"MD5", "version"=>"1.0",//此参数作用为返回的数据的格式 ‘yes’时返回的是json格式数据,并且没有支付页面,只返回支付链接 ‘no’时返回的是支付页面 "outcome"=>"no", ); //组装参与签名的字段,生成一个数组$data; $key = '1'; //商户号所对应的商户密钥 ksort($data); //按照键名对关联数组进行升序排序 //生成 URL-encode 之后的请求字符串 $postString = http_build_query($data); //将$postString连接上商户密钥后再MD5加密 $mdString = md5($postString.$key); //将MD5后的数据全部专为大写 生成签名 $signMyself = strtoupper($mdString); //将签名加入数组 $data["sign"] = $signMyself; $data['productName'] = '1323123123'; $data['productDesc'] = '1111111' ; $data['isLoop'] = 'no ' ;//使用轮训模式时此参数为yes $data['createTime'] = time();//time()为当前时间戳 秒级 //接收订单回调数据的URL $data['notifyUrl'] = 'http://132.232.133.220/notify.php'; //支付成功后跳转到的地址 $data['returnUrl'] = 'https://www.baidu.com/'; //使用GET方式访问需要生成 URL-encode 之后的请求字符串 // 这里可以用 GET 也可以用POST方式 $postString = http_build_query($data); $url="http://124.71.24.24/api/add?".$postString; header("Location: " .$url);
标签:PHP,商户,生成,签名,key,yes,postString,data,MD5 From: https://www.cnblogs.com/kevin-yang123/p/17026912.html