>  기사  >  백엔드 개발  >  PHP는 비동기 알림을 구현합니다.

PHP는 비동기 알림을 구현합니다.

WBOY
WBOY원래의
2023-05-07 14:42:08896검색

인터넷 비즈니스에서는 결제, 충전, 환불, 현금인출 등 자금거래와 관련된 시나리오가 필수적입니다. 이를 위해서는 시스템이 양쪽 당사자에게 거래 결과를 알리기 위해 비동기식 알림을 수행할 수 있어야 합니다. 이러한 시나리오에서는 매우 널리 사용되는 백엔드 개발 언어인 PHP가 널리 사용됩니다. 이 기사에서는 PHP를 사용하여 비동기 알림을 구현하는 방법을 설명합니다.

1. 비동기 알림이란 무엇인가요?

사용자가 거래를 수행한 후 결제 또는 수령 당사자는 거래 성공 알림을 받게 되며, 이를 통해 양측은 적시에 거래 결과를 이해할 수 있습니다. 이 시나리오에서 동기 알림을 사용하면 트랜잭션 시간이 길어지고 사용자 경험이 저하될 수 있으며 트랜잭션이 실패하고 트랜잭션의 신뢰성이 영향을 받을 수 있습니다. 따라서 우리는 비동기 알림, 즉 콜백 함수를 사용하여 트랜잭션 결과를 알림을 사용합니다.

2. PHP에서 비동기 알림을 구현하는 단계

PHP를 사용하여 비동기 알림을 구현하는 방법을 소개하기 위해 결제 시나리오를 예로 들었습니다.

  1. 결제 요청 시작:

사용자가 애플리케이션에서 결제 요청을 시작하면 백엔드는 결제 플랫폼에 결제 요청을 보내고, 결제 플랫폼으로부터 응답을 받고, 응답에서 결제 URL을 얻습니다. .

PHP 샘플 코드:

$data = [
    'amount' => '10.00',
    'body' => '测试订单',
    'channel' => 'alipay_wap',
    'currency' => 'cny',
    'return_url' => 'http://example.com/return',
    'notify_url' => 'http://example.com/notify',
];

$result = curl_post('https://api.payment.com/payments', $data);
$payment_url = isset($result['payment_url']) ? $result['payment_url'] : '';
  1. 결제 플랫폼 인터페이스 호출:

cURL을 통해 POST 요청 보내기, 결제 플랫폼 인터페이스 호출, 결제 플랫폼에 결제 요청 보내기 및 응답 결과 얻기 결제 플랫폼에서 반환됩니다.

PHP 샘플 코드:

function curl_post($url, $data = [], $header = [])
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Accept: application/json',
    ) + $header);
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response, true);
}
  1. 인터페이스에서 반환 URL 설정:

결제 성공 또는 실패 시 백그라운드 결제 결과를 애플리케이션에 알리는 데 사용되는 반환 URL을 인터페이스에서 설정합니다. 거래 상태를 확인하는 것도 가능합니다.

PHP 샘플 코드:

$data = [
    'amount' => '10.00',
    'body' => '测试订单',
    'channel' => 'alipay_wap',
    'currency' => 'cny',
    'return_url' => 'http://example.com/return',
    'notify_url' => 'http://example.com/notify',
];

notify_url 매개변수는 결제 결과를 수신하기 위한 주소와 결제 플랫폼에서 비동기 알림을 보내기 위한 주소를 전달하는 데 사용됩니다.

  1. 비동기 알림 수신을 위한 콜백 기능

결제 플랫폼은 사용자의 결제 요청을 받고 거래가 완료되면 지정된 inform_url로 비동기 알림을 보내 결제 결과를 알려준다. 따라서 콜백 함수에서 서명을 확인하고 비즈니스 로직을 처리한 후 마지막에 확인 정보를 반환해야 합니다.

PHP 샘플 코드:

function notify()
{
    $data = $_POST;
    $time_now = time();

    // 验证签名
    if (!openssl_verify(json_encode($data), base64_decode($data['signature']), $public_key)) {
        return 'false';
    }
    // 更新订单状态
    update_order($data['order_id']);
    return 'success';
}
  1. 서명 확인

결제 플랫폼에서 전송한 결과는 신뢰성을 보장해야 하기 때문에 결제 플랫폼에서 반환한 데이터의 서명을 확인해야 합니다. 서명 검증 과정에서 우리는 결제 플랫폼에서 제공한 공개 키를 사용하여 서명을 검증하여 결제 플랫폼에서 발행한 합법적인 결과인지 확인해야 합니다.

PHP 샘플 코드:

if (!openssl_verify(json_encode($data), base64_decode($data['signature']), $public_key)) {
    return 'false';
}
  1. 주문 상태 업데이트

결제 성공 후 애플리케이션이 실제 주문 상태를 이해할 수 있도록 주문 상태 정보를 업데이트해야 합니다. 이 단계에서는 비즈니스 로직을 호출하여 업데이트할 수 있습니다.

PHP 샘플 코드 :

function update_order($order_id)
{
    // 调用业务逻辑处理订单状态更新
}
  1. 반환 확인 정보

처리가 완료된 후 결제 결과가 처리되었음을 확인했다는 확인 정보를 결제 플랫폼에 반환해야 하며, 반환 코드는 (예: 200)은 처리가 성공했음을 나타냅니다.

PHP 샘플 코드:

return 'success';

3. 비동기 알림의 취약점을 피하세요

보안을 보장하려면 다음 취약점을 피해야 합니다.

  1. 비동기 알림을 한 번만 처리하세요. 그렇지 않으면 여러 요청이 발생하여 가져옵니다. 불필요한 보안 위험.
  2. 제3자의 요청 변조를 방지하려면 비동기 알림을 처리할 때 결과의 서명 확인을 보장하세요.
  3. 비동기 알림 결과 처리의 기능적 논리가 실패하여 데이터 불일치가 발생하지 않는지 확인하세요.
  4. 공격자가 주소를 악의적으로 변조하고 CSRF 공격을 수행하는 것을 방지하려면 비동기 알림 URL이 제3자에게 제공될 때 변조되지 않도록 하세요.

4. 요약

이 글은 PHP를 사용하여 비동기 알림을 구현하는 과정을 소개하고 보안 예방 조치를 제안하는 내용이 모든 사람에게 도움이 되기를 바랍니다. 비동기식 알림은 금융 거래 시나리오에서 특히 중요하며 보안에 특별한 주의를 기울여야 하며 허점과 오류를 방지하려면 설계 중에 서명, 반복 처리, 보안 위험 등의 문제를 신중하게 고려해야 합니다.

위 내용은 PHP는 비동기 알림을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.