개인적으로는 스캐닝코드 결제가 Jsapi 결제보다 개발이나 사용 측면에서 훨씬 원활하다고 생각합니다. QR 코드를 스캔하여 결제할 때 PC, 모바일 브라우저, 위챗 클라이언트를 통한 접속에 대해 걱정할 필요 없이 QR 코드를 생성하고 스캔하여 결제할 수 있습니다.
일부 구성 및 코드 SDK와 SDK의 오류에 대해서는 이전 기사를 참조하세요. 위챗페이 기사
위챗결제 - 공식계정 결제코드 상세설명
다음 내용은 정말 간단하다는 점을 알려드립니다. - -# Jsapi 결제를 실행하셨다면 QR 코드를 스캔하여 결제하는 데 특별한 방법은 없습니다.
결제를 시작하기 위해 QR 코드를 스캔하는 파일은 예제 SDK의 Native.php 파일에 있습니다.
스캔코드 결제에는 두 가지 결제 방식이 있습니다. 스캔코드 결제를 이용하기 전에 결제 콜백 URL에 대한 구체적인 구성을 설정해야 합니다.
WeChat 개발자 문서 http://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_3
두 가지 결제 방법 소개
모드 1: http://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4
모드 2: http://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5
실제로 모드 2에서는 콜백 URL 설정이 필요하지 않습니다. 단, 결제 구성을 수정하고 스캔코드 결제를 사용하게 되면 반드시 네이티브 결제를 체크하셔야 합니다. 이때 콜백 URL은 필수입니다.
그런데 모드 2만 사용하고 싶습니다. 모드 2에는 콜백 URL이 없어서 앞으로 모드 1에서 사용할 수 있는 URL을 임의로 작성해야 합니다.
코드 분석:
스캔 코드 결제 모드 1
$notify = new NativePay(); $url1 = $notify->GetPrePayUrl("123456789");
$input = new WxPayUnifiedOrder(); $input->SetBody("test"); $input->SetAttach("test"); $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis")); $input->SetTotal_fee("1"); $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 600)); $input->SetGoods_tag("test"); $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php"); $input->SetTrade_type("NATIVE"); $input->SetProduct_id("123456789"); $result = $notify->GetPayUrl($input); $url2 = $result["code_url"];
<img alt="模式二扫码支付" src="http://paysdk.weixin.qq.com/example/qrcode.php?data=<?php echo urlencode($url2);?>" style="width:150px;height:150px;"/>
이 함수는 example/Wxpay.NativePay.php 파일에 정의되어 있습니다.
public function GetPayUrl($input) { if($input->GetTrade_type() == "NATIVE") { $result = WxPayApi::unifiedOrder($input); return $result; } }
$result = WxPayApi::unifiedOrder($input);
if($inputObj->GetTrade_type() == "JSAPI" && !$inputObj->IsOpenidSet()){ throw new WxPayException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"); } if($inputObj->GetTrade_type() == "NATIVE" && !$inputObj->IsProduct_idSet()){ throw new WxPayException("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!"); }
기본 방법에는 product_id가 필요합니다. 그런데 기본 결제 방법인지 확인하기 위해 product_id 프롬프트가 누락되었지만 JSAPI에는 product_id가 필요한 것으로 나타났습니다.
아아, 정말 더 이상 엉성할 수 없습니다. SDK를 이렇게 엉성하게 작성할 수도 있습니다.
그런 다음 통합 주문 인터페이스 프로세스가 호출됩니다.
함수가 실행되면 weixin://으로 시작하는 링크가 반환되며, 이후 phpqrcode 프로그램을 호출하여 QR 코드를 생성할 수 있습니다.
결제 결과 처리 페이지에서는 여전히 inform.php 파일의 처리 로직을 사용할 수 있습니다.
추가 자료:
WeChat 결제 스캔 코드 결제(자바 버전 기본 결제)
WeChat 결제 개발 과정
WeChat Payment JS-SDK 최신 버전, 0부터 시작
iOS-WeChat 결제 정보
위챗 결제 - 스캔코드 결제 관련 내용을 소개하고 있으니 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.