charset; } /** * @param string $charset */ public function setCharset(string $charset): void { $this->charset = $charset; } /** * @return string */ public function getSign(): string { return $this->sign; } /** * @param string $sign */ public function setSign(string $sign): void { $this->sign = $sign; } /** * @return string */ public function getMchBillno(): string { return $this->mch_billno; } /** * @param string $mch_billno */ public function setMchBillno(string $mch_billno): void { $this->mch_billno = $mch_billno; } /** * @return string */ public function getMchName(): string { return $this->mch_name; } /** * @param string $mch_name */ public function setMchName(string $mch_name): void { $this->mch_name = $mch_name; } /** * @return string */ public function getReOpenid(): string { return $this->re_openid; } /** * @param string $re_openid */ public function setReOpenid(string $re_openid): void { $this->re_openid = $re_openid; } /** * @return string */ public function getTotalAmount(): string { return $this->total_amount; } /** * @param string $total_amount */ public function setTotalAmount(string $total_amount): void { $this->total_amount = $total_amount; } /** * @return string */ public function getTotalNum(): string { return $this->total_num; } /** * @param string $total_num */ public function setTotalNum(string $total_num): void { $this->total_num = $total_num; } /** * @return string */ public function getWishing(): string { return $this->wishing; } /** * @param string $wishing */ public function setWishing(string $wishing): void { $this->wishing = $wishing; } /** * @return string */ public function getActName(): string { return $this->act_name; } /** * @param string $act_name */ public function setActName(string $act_name): void { $this->act_name = $act_name; } /** * @return string */ public function getIconId(): string { return $this->icon_id; } /** * @param string $icon_id */ public function setIconId(string $icon_id): void { $this->icon_id = $icon_id; } /** * @return string */ public function getBannerId(): string { return $this->banner_id; } /** * @param string $banner_id */ public function setBannerId(string $banner_id): void { $this->banner_id = $banner_id; } /** * @return string */ public function getNotSendMsg(): string { return $this->not_send_msg; } /** * @param string $not_send_msg */ public function setNotSendMsg(string $not_send_msg): void { $this->not_send_msg = $not_send_msg; } /** * @return string */ public function getMinValue(): string { return $this->min_value; } /** * @param string $min_value */ public function setMinValue(string $min_value): void { $this->min_value = $min_value; } /** * @return string */ public function getMaxValue(): string { return $this->max_value; } /** * @param string $max_value */ public function setMaxValue(string $max_value): void { $this->max_value = $max_value; } /** * @return mixed * 构建请求参数 */ public function generate(): array { $requestParam = []; $requestParam['charset'] = $this->getCharset(); $requestParam['nonce_str'] = Help::random(30); $requestParam['mch_billno'] = $this->getMchBillno(); $requestParam['mch_id'] = $this->payConfig->pay->qq->mchId; $requestParam['mch_name'] = $this->getMchName(); $requestParam['qqappid'] = $this->payConfig->appId; $requestParam['re_openid'] = $this->getReOpenid(); $requestParam['total_amount'] = $this->getTotalAmount() * 100; $requestParam['min_value'] = $this->getMinValue() * 100; $requestParam['max_value'] = $this->getMaxValue() * 100; $requestParam['total_num'] = $this->getTotalNum(); $requestParam['wishing'] = $this->getWishing(); $requestParam['act_name'] = $this->getActName(); $requestParam['icon_id'] = $this->getIconId(); $requestParam['notify_url'] = $this->payConfig->getNotifyUrl(); $requestParam['sign'] = $this->builderSign($requestParam); return $requestParam; } /** * @param $requestParam * @return string */ private function builderSign($requestParam): string { return Help::sign($requestParam, $this->payConfig->pay->qq->mchSecret, $this->payConfig->getSignType()); } /** * @return Result */ public function redEnvelopes(): Result { $client = new Client('api.qpay.qq.com', 443, true); $client->withHeader(['Content-Type' => 'application/x-www-form-urlencoded']); $client->withSslKeyFile($this->payConfig->pay->wx->mchKey); $client->withSslCertFile($this->payConfig->pay->wx->mchCert); $proxyHost = $this->payConfig->getProxyHost(); $proxyPort = $this->payConfig->getProxyPort(); if (!empty($proxyHost) && $proxyPort > 0) { $client->withProxyHost($proxyHost)->withProxyPort($proxyPort); } $client->post($this->sendUrl, http_build_query($this->generate())); $client->close(); if (!in_array($client->getStatusCode(), [101, 200, 201])) { return new Result(code: 505, message: $client->getBody()); } $json = json_decode($client->getBody(), true); if (isset($json['return_code']) && $json['return_code'] != 'SUCCESS') { return new Result(code: 500, message: $json['return_msg'] ?? $json['retmsg']); } if ($json['retcode'] != 0) { return new Result(code: $json['retcode'], message: $json['retmsg']); } else { return new Result(code: 0, data: $json); } } /** * @param $listid * @param $orderNo * @return Result */ public function searchByOrderNo($listid, $orderNo = null): Result { $requestParam['nonce_str'] = Help::random(31); $requestParam['mch_id'] = $this->payConfig->pay->wx->mchId; $requestParam['listid'] = $listid; if (!empty($orderNo)) { $requestParam['mch_billno'] = $orderNo; } $requestParam['sign'] = $this->builderSign($requestParam); $client = new Client('qpay.qq.com', 443, true); $proxyHost = $this->payConfig->getProxyHost(); $proxyPort = $this->payConfig->getProxyPort(); if (!empty($proxyHost) && $proxyPort > 0) { $client->withProxyHost($proxyHost)->withProxyPort($proxyPort); } $client->withHeader(['Content-Type' => 'application/json']); $client->post($this->searchUrl, $requestParam); $client->close(); if (!in_array($client->getStatusCode(), [101, 200, 201])) { return new Result(code: 505, message: $client->getBody()); } $json = json_decode($client->getBody(), true); if (isset($json['result']) && $json['result'] != 'SUCCESS') { return new Result(code: 500, message: $response['res_info'] ?? '订单查询失败!'); } else { return new Result(code: 0, data: $json); } } }