Browse Source

下单支付:线上、线下

master
weigang 6 years ago
parent
commit
8af4a94909
  1. 81
      app/Controller/PaymentController.php

81
app/Controller/PaymentController.php

@ -39,6 +39,7 @@ class PaymentController extends BaseController
'openid' => $data['openid'],
]);
// 返回支付参数给前端
$parameters = [
'appId' => $result['appid'],
'timeStamp' => '' . time() . '',
@ -47,36 +48,11 @@ class PaymentController extends BaseController
'signType' => 'MD5'
];
//签名步骤一:按字典序排序参数
ksort($parameters);
$string = $this->formatBizQueryParaMap($parameters, false);
//签名步骤二:在string后加入KEY
$string = $string . "&key=" . $config['key'];
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$parameters['paySign'] = strtoupper($string);
$parameters['paySign'] = $this->signture($parameters, $config['key']);
return $this->success($parameters);
}
///作用:格式化参数,签名过程需要使用
private function formatBizQueryParaMap($paraMap, $urlencode) {
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v) {
if ($urlencode) {
$v = urlencode($v);
}
$buff .= $k . "=" . $v . "&";
}
$reqPar = null;
if (strlen($buff) > 0) {
$reqPar = substr($buff, 0, strlen($buff) - 1);
}
return $reqPar;
}
public function wxminiPayOffline(WxminiPayRequest $request){
$data = $request->validated();
@ -104,10 +80,57 @@ class PaymentController extends BaseController
'openid' => $data['openid'],
]);
$result['sign_type'] = 'MD5';
$result['timestamp'] = time();
// 返回支付参数给前端
$parameters = [
'appId' => $result['appid'],
'timeStamp' => '' . time() . '',
'nonceStr' => uniqid(),
'package' => 'prepay_id=' . $result['prepay_id'],
'signType' => 'MD5'
];
$parameters['paySign'] = $this->signture($parameters, $config['key']);
return $this->success($parameters);
}
/**
* 支付参数加签
* @param $parameters
* @param $key
* @return string
*/
private function signture($parameters, $key)
{
// 按字典序排序参数
ksort($parameters);
// http_query
$queryParams = $this->http_query($parameters);
// 加入KEY
$queryParams = $queryParams . "&key=" . $key;
// MD5加密
$queryParams = md5($queryParams);
// 字符转为大写
return strtoupper($queryParams);
}
/**
* 参数转为http query字串
* @param $parameters
* @return string
*/
private function http_query($parameters) {
$http_query = [];
foreach ($parameters as $key => $value) {
$http_query[] = $key.'='.$value;
}
return $this->success($result);
return implode('&', $http_query);
}
}
Loading…
Cancel
Save