Параметры, возвращаемые обратным вызовом платежа WeChat (POST)
$verify=$smpw->_sign_verify([$timestamp, $nonce, $body],$signature);
if ($verify==1){
echo 'ok';
}else echo 'failure';
/**
* Окупаемость(Подтвердить подпись
* @param $data
* @param $signature
* @return int
*/
public function _sign_verify($data, $signature): int {
$message = implode("\n", $data) . "\n";
$pu_key = openssl_pkey_get_public(file_get_contents('Абсолютный адрес открытого ключа Вичат'));//wxp_pub.pem1️⃣
return openssl_verify(str_replace("\n\n", "\n", $message), base64_decode($signature), $pu_key, 'sha256WithRSAEncryption');
}
$obj=new AesUtil('API ключ v3');//1️⃣Merchant За кулисами->Центр учета->APIБезопасность->APIv3ключ
$body = json_decode($body, true);
if ($body['event_type']=='TRANSACTION.SUCCESS'){//Тип уведомления
$resource = $body['resource'];
$decryption = $obj->decryptToString($resource['associated_data'], $resource['nonce'], $resource['ciphertext']);
$result = json_decode($decryption, true);
//var_dump($result);exit;
//Проверяем, является ли статус транзакции $result['trade_state'] УСПЕШНЫМ
//Проверяем $result['mchid'], Верен ли $result['appid']?
//Проверяем, соответствует ли фактическая сумма платежа $result['amount']['payer_total'] сумме, подлежащей оплате
//Используем номер нашего платежного поручения $result['out_trade_no'] для обработки последующего процесса
//Ответ на уведомление
echo json_encode(['code'=>'SUCCESS', 'message'=>'успех'], JSON_UNESCAPED_UNICODE);
}
https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_5.shtml
Примечание. Как решить проблему, когда расшифровка не удалась и возвращает false? Сбросьте секретный ключ и попробуйте изменить его на прописные буквы.
Запрещено воспроизведение без разрешения:блог толстого кота » Обработка обратного вызова платежа через WeChat API v3