위챗페이 JSAPI 결제 설정과 OpenID 획득

위챗페이 상품 활성화

먼저 위챗페이에서 위챗페이 판매자로 등록해야 합니다.

구체적인 결제 제품 선택

판매자 계정 생성 후 관리 페이지에서 JSAPI와 같은 구체적인 결제 제품을 선택하고 사용 신청을 해야 합니다.

공식 계정 연동

이 단계는 선택 사항이며, 특정 결제 제품이 공식 계정과의 상호 작용을 필요로 하는지에 따라 다릅니다. 예를 들어 JSAPI는 공식 계정 지원이 필요합니다. 결제 기능을 가진 판매자는 특정 공식 계정과 연결되어야 하며, 이를 통해 사용자의 OpenID를 얻을 수 있습니다. 연결 방법은 판매자 관리 페이지의 APPID 권한 관리 섹션에서 해당 공식 계정의 APPID를 입력하여 신청하면 됩니다. 신청 후 해당 공식 계정에서 승인을 받아야 합니다.

관리 페이지 설정

  • 결제 권한 디렉토리

판매자 관리 페이지의 개발 설정 > 결제 설정 에서 공식 계정 결제 의 결제 권한 디렉토리를 추가해야 합니다. 이 디렉토리는 서버 측에서 위챗페이 API 요청을 보낼 때 사용되는 경로입니다. 예를 들어, 인터페이스 경로가 http://도메인/wxpay/jsapi.php 라면 디렉토리는 http://도메인/wxpay/ 로 설정해야 합니다.

  • 공식 계정 인터페이스 권한

공식 계정 관리 페이지에서 설정 > 공식 계정 설정 > 기능 설정 > 웹페이지 인증 도메인 에서 개발 서버의 도메인을 설정해야 합니다. 이 도메인은 위챗으로부터 사용자 OpenID 데이터를 받을 수 있는 도메인입니다. 예를 들어, wxpay.txxxt.com 을 설정하고 위챗에서 제공하는 검증 파일을 해당 디렉토리에 배치하면 됩니다.

  • 개발 환경 준비

  • 웹(H5+백엔드 인터페이스) 개발에는 익숙한 도구를 사용할 수 있습니다.

  • 위챗 웹 개발자 도구 다운로드

개발 및 디버깅 시 위챗 API 호출은 반드시 위챗 웹 개발자 도구 를 사용해야 합니다. 일반 브라우저에서는 위챗 API 특성을 사용할 수 없습니다.

  • 예시 프로젝트 경로 http://wxpay.txxxt.com/jsapi/, getCode.php 인터페이스는 code 값을 얻기 위한 완전한 URL을 생성하고 요청을 보냅니다. codeCallback.php 는 위챗에서 반환된 콜백을 처리하며, 성공 시 code 값을 포함합니다. log.php 는 로그를 기록하고, jsapi_access_log.log 는 로그 파일입니다.

개발 실습

첫 번째 단계: 사용자 동의 및 code 획득

사용자가 동의하면 code 를 얻을 수 있으며, 이를 통해 OpenID 를 획득할 수 있습니다.

$appId = ""; // 여기에 공식 계정 appid 입력
$redirectUrl = "http://wxpay.txxxt.com/jsapi/openIdRedirect.php"; // 여기에 콜백 주소 입력
$state = strval(time()); // 사용자 정의 state 매개변수 예시
$baseUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?";

// 파라미터 순서를 지키고 URL을 조합합니다.
$requestUrl = $baseUrl;
$requestUrl .= "appid=" . $appId;
$requestUrl .= "&redirect_uri=" . urlencode($redirectUrl);
$requestUrl .= "&response_type=code&scope=snsapi_base"; // 사용자 인증 페이지 없이 OpenID만 가져옵니다.
$requestUrl .= "&state=" . $state;
$requestUrl .= "#wechat_redirect";

header("Location: $requestUrl"); // 완성된 URL로 리다이렉트
exit();

콜백 처리:

$code = isset($_GET['code']) ? $_GET['code'] : "";
$state = isset($_GET['state']) ? $_GET['state'] : "";

if (empty($code)) {
    echo "코드 획득 실패";
} else {
    echo "코드 획득 성공: " . $code;
}

두 번째 단계: AppID + AppSecret + code로 OpenID 획득

$appId = ""; // 여기에 공식 계정 appid 입력
$appSecret = ""; // 여기에 앱 비밀번호(AppSecret) 입력
$code = ""; // 이전 단계에서 얻은 코드 값 입력
$getTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appId&secret=$appSecret&code=$code&grant_type=authorization_code";

$response = file_get_contents($getTokenUrl);
$data = json_decode($response, true);

if (!isset($data['openid'])) {
    echo "OpenID 획득 실패: " . $data['errmsg'];
} else {
    echo "OpenID 획득 성공: " . $data['openid'];
}

이 과정을 통해 snsapi_base 방식으로 OpenID 를 획득할 수 있습니다. 다음 글에서는 이 OpenID 를 이용해 결제 거래 ID를 요청하는 방법에 대해 설명하겠습니다.

태그: 위챗페이 JSAPI OpenID PHP 웹개발

6월 24일 05:43에 게시됨