您的位置:首页 > 移动开发

app集成支付宝,服务器生成请求签名字符串demo(PHP)

2017-09-22 18:25 676 查看
public function signstr(Request $request){
// 获取商户订单号
$tradeid = $request->input("tradeid");
// 查询订单信息
$info = DB::connection("bm")->table("bm_border")->where("tradeid","=",$tradeid)->first();
if($info){
// 拼接biz_content的内容
$biz_array = [];
$biz_array['subject'] = $info["title"];
$biz_array['seller_id'] = Config::get("latrell-alipay-app.seller_id");
// $biz_array['total_amount'] = $info["total"];
$biz_array['total_amount'] = "0.01";
$biz_array['product_code'] = "QUICK_MSECURITY_PAY";
$biz_array['out_trade_no'] = $info["tradeid"];
$biz_array['timeout_express'] = "30m";
$biz_array['body'] = "我是测试数据";
$biz_str = json_encode($biz_array);
// 获取参数值
$priKey = Config::get("latrell-alipay-app.privateKey");
$res = "-----BEGIN RSA PRIVATE KEY-----\n" .
wordwrap($priKey, 64, "\n", true) .
"\n-----END RSA PRIVATE KEY-----";
$oridata = [
'notify_url'=>"http://www.cuijiapeng.com/notify.php",
'app_id'=>Config::get("latrell-alipay-app.app_id"),
'biz_content'=>$biz_str,
'charset'=>'utf-8',
'method'=>'alipay.trade.app.pay',
'timestamp'=>date("Y-m-d H:i:s",time()),
'version'=>'1.0',
'sign_type'=>'RSA2',
];
$uri = "";
// 将数组的关键字进行排序
ksort($oridata);
$arraykey = array_keys($oridata);
$arrayval = array_values($oridata);
// 组装uri并且将值进行 encode 编码
foreach ($arraykey as $key => $value) {
if($value == "timestamp"){
$arrayval[$key] = str_replace(" ","%20",$arrayval[$key]);
$arrayval[$key] = str_replace(":","%3A",$arrayval[$key]);
$uri .= $value."=".$arrayval[$key]."&";
}else{
$uri .= $value."=". urlencode($arrayval[$key])."&";
}
}
$uri = rtrim($uri,"&");
// 组装待签名字符串
$sigdata = "";
ksort($oridata);
$arraykey = array_keys($oridata);
$arrayval = array_values($oridata);
foreach ($arraykey as $kk => $vv) {
$sigdata .= $vv."=".$arrayval[$kk]."&";
}
$sigdata = rtrim($sigdata,"&");
// 将组装好的待签名的字符串进行签名
openssl_sign($sigdata, $sign, $res, OPENSSL_ALGO_SHA256);  //SRA2
$sign = urlencode(base64_encode($sign));
// 组装生成最终的请求字符串
$ordersign = $uri."&"."sign=".$sign;
$datas['code'] = 200;
$datas['singstr'] = $ordersign;
}else{
$datas['code'] = 409;
}
return response()->json($datas);
}
Laravel版本Demo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐