diff --git a/app/Controller/PaymentController.php b/app/Controller/PaymentController.php index a411185..f8d36fd 100644 --- a/app/Controller/PaymentController.php +++ b/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); } } \ No newline at end of file