PHP原生服务端签名生成请求订单信息「orderString」仅供参考
接口文档:[url]https://docs.open.alipay.com/204/105465/[/url]
第一步:配置开发者信息「私钥」And「App_id」
复制代码
* 配置信息 */
$app_id='';
$private_key='';
$sign_type='RSA2';
第二步:组装部分请求参数
根据接口文档组装参数 app_id、method、format、timestamp、charset、version、notify_url、sign_type
复制代码
$params['app_id'] = $app_id;
$params['method'] = 'alipay.trade.app.pay';
$params['format'] = 'json';
$params['timestamp'] = date("Y-m-d H:i:s");
$params['charset'] = 'UTF-8';
$params['version'] = '1.0';
$params['notify_url'] = '';
$params['sign_type'] = $sign_type;
第三步:组装业务参数json格式,并填充在$params数组中
根据业务需求组装需要用到的业务参数
复制代码
$bizcontent['body'] = '非sdk原生php服务端生成请求订单';
$bizcontent['subject'] = 'php代码示例';
$date=date("YmdHis");
$arr=range(1000,9999);
shuffle($arr);
$out_trade_no=$date.$arr[0];
$bizcontent['out_trade_no'] = $out_trade_no;
$bizcontent['timeout_express']='10m';
$bizcontent['total_amount'] = '0.01';
$bizcontent['product_code'] = 'QUICK_MSECURITY_PAY';
$bizcontent['goods_type'] = '0';
$bizcontent['passback_params']='spicy%3d%e8%87%aa%e5%ae%9a%e4%b9%89%e5%8f%82%e6%95%b01%26custom%3d%e8%87%aa%e5%ae%9a%e4%b9%89%e5%8f%82%e6%95%b02';
$biz_content=json_encode($bizcontent,JSON_UNESCAPED_UNICODE);
$params['biz_content'] = $biz_content;
第四步:排序签名得到sign,并填充在$params数组中「签名方法请往下翻」
复制代码
ksort($params);
$params['sign'] = sign($params, $params['sign_type'], $private_key);
第五步:将参数urlencode输出查看,打印出来的参数可以直接放在客户端使用
复制代码
echo htmlspecialchars(http_build_query($params));
工具方法:签名方法和检查是否为空方法
复制代码
function sign($params,$signType,$private_key){
$stringToBeSigned = "";
$i = 0;
foreach ($params as $k => $v) {
if (false === checkEmpty($v) && "@" != substr($v, 0, 1)) {
if ($i == 0) {
$stringToBeSigned .= "$k" . "=" . "$v";
} else {
$stringToBeSigned .= "&" . "$k" . "=" . "$v";
}
$i++;
}
}
unset ($k, $v);
$res = "-----BEGIN RSA PRIVATE KEY-----".PHP_EOL.wordwrap($private_key, 64, PHP_EOL, true).PHP_EOL."-----END RSA PRIVATE KEY-----";
($res) or die('您使用的私钥格式错误,请检查RSA私钥配置');
if ("RSA2" == $signType) {
openssl_sign($stringToBeSigned, $sign, $res, OPENSSL_ALGO_SHA256);
} else {
openssl_sign($stringToBeSigned, $sign, $res);
}
return base64_encode($sign);
}
function checkEmpty($value) {
if (!isset($value))
return true;
if ($value === null)
return true;
if (trim($value) === "")
return true;
return false;
}