>백엔드 개발 >PHP 튜토리얼 >Alipay 컴퓨터 웹사이트 결제를 구현하기 위한 TP5 도입 예시

Alipay 컴퓨터 웹사이트 결제를 구현하기 위한 TP5 도입 예시

不言
不言앞으로
2019-02-28 11:43:184461검색

이 기사는 TP5가 Alipay 컴퓨터 웹사이트 결제를 구현하는 방법에 대한 예를 제공합니다. 이는 특정 참고 가치가 있습니다. 도움이 필요한 친구가 도움이 되기를 바랍니다.

저는 이틀간 회사에서 소규모 WEB 프로젝트를 진행하고 있는데 결제 기능이 필요합니다. 알리페이로 ​​결제하는 것이 처음이라 몇 가지 함정에 부딪혔지만 꽤 매끄러웠습니다. 신나는 마음으로 구현 과정을 빠르게 적어봤습니다.
첫 번째 단계는 물론 Alipay 오픈 플랫폼에서 공개 키 개인 키 APPID 등을 신청하는 것입니다. 공식 Alipay 문서에는 자세한 소개가 있으므로 여기서는 생략하겠습니다.
신청이 완료되면 개발자 구현 프로세스가 시작됩니다. 먼저 Alipay의 공식 DEMO를 다운로드하세요. 웹사이트는 https://docs.open.alipay.com/... 초보자의 경우 SDK에 캡슐화된 기능이 있으므로 SDK 대신 공식 DEMO를 다운로드하는 것이 좋습니다. 직접 사용이 가능한 DEMO를 변경하고 싶을 때 사용하시면 더욱 편리합니다. 나중에 기술이 좋아지면 다시 SDK로 플레이할 수 있겠네요.

Alipay 컴퓨터 웹사이트 결제를 구현하기 위한 TP5 도입 예시

저는 PHPer이기 때문에 당연히 PHP 버전을 선택합니다. 다운로드 후, 기본 이름은 alipay.trade.page.pay-PHP-UTF-8 입니다. 이름을 alipay로 변경하는 것을 권장합니다.
저는 TP5를 이용하여 개발중이기 때문에 프로젝트 루트 디렉터리 아래 외부 리소스 패키지 Vendor 디렉터리에 넣어두었습니다.

Alipay 컴퓨터 웹사이트 결제를 구현하기 위한 TP5 도입 예시

넣은 후 alipay 디렉토리 아래의 pagepay 디렉토리에서 pagepay.php 파일을 찾으세요. 알리가 공식적으로 제공하는 결제 방법 샘플입니다. 온라인 학생 TP5 방법에 넣으면 아래 그림을 참고하세요.

Alipay 컴퓨터 웹사이트 결제를 구현하기 위한 TP5 도입 예시

여기까지 성공적으로 들어가면 Alipay QR 코드 페이지가 나타납니다. 고객이 권한을 다시 신청했기 때문에 여기서 스크린샷을 찍을 수 없습니다. 알리페이 QR코드 페이지입니다. QR 코드를 스캔하여 결제하면 결제 성공 페이지로 이동하며, 마지막으로 맞춤 동기화 점프 주소로 이동합니다.

프런트 엔드 양식에서 가격을 전달할 수 있습니다. 여기서는 Alipay 컴퓨터 웹사이트 결제를 구현하기 위한 TP5 도입 예시세 가지 필수 필드

가 있음을 강조합니다.

주문 번호, 주문 이름, 결제 금액

이 세 가지 중 하나라도 누락되면 오류가 발생합니다. 보고됩니다. 처음에 머리가 복잡해서 주문명을 지웠더니 오류가 나더라구요...

다 쓰고 나서 config.php에 가서 각종 매개변수 설정을 했는데요. config.php는 alipay 루트디렉토리에 있습니다. 이 항목은 중요합니다. 실수하면 판매자가 대금을 받을 수 없습니다...ID, 개인키, 비동기주소, 동기주소, 공개키를 이용하여 바보들을 위한 양식을 작성하는 방법은 다음과 같습니다. 위 6가지 항목을 정확하게 입력하셔야 합니다. TP5를 사용하고 있기 때문에 알림 주소를 TP5, module/controller/method로 변경했습니다. Alipay 게이트웨이를 샌드박스 환경인 경우 "https://openapi.alipaydev"로 변경해야 합니다. .com/gateway.do"에는 "dev"가 추가되어 있습니다. 실제 환경이므로 변경할 필요가 없습니다.


비동기식 주소와 동기식 주소에 대해 다시 이야기해 보겠습니다. 초보자는 확실히 무엇에 사용되는지 모르므로 선배는 그냥 건너뛰어도 됩니다. 이 두 가지 방법은 Alipay 결제가 성공한 후 실행되며 시스템은 POST 방법을 사용하여 결제 정보를 비동기적으로 해당 방법으로 전송합니다. 비동기식이기 때문에 페이지가 바뀌지 않습니다. "총잡이가 되지 말고 조용히 마을에 들어가라..."라는 말처럼 비동기식 방식으로 자신만의 비즈니스 로직을 작성할 수 있습니다. 예를 들어 값을 수신하여 데이터베이스에 저장합니다.

여기에 큰 함정이 있어서 이틀 동안 고민했습니다

, Alipay 컴퓨터 웹사이트 결제를 구현하기 위한 TP5 도입 예시즉, 세션을 사용하여 비동기 방식으로 값을 가져올 수 없습니다

원래는 세션을 사용하여 사용자 로그인 ID를 가져오고 저장하려고 했습니다. 데이터베이스에 있는데 나중에 마스터한테 물어보니 알게 됐어요. 비동기는 서버와 서버 사이의 상호 작용이라 cookieId가 없고, 당연히 cookieId가 없으면 세션 값도 없습니다. 여기서 이해가 안가시는 분들을 위해 세션에 대한 기본지식을 복습하시면 됩니다. 이런 기본적인걸 잊어버렸다는게 부끄럽네요... 이것으로 보면 동기화 방식이 세션을 차지할 수 있다는 것을 알 수 있습니다. 서버와 클라이언트 간의 상호 작용. 이에 대해 잘 모르시는 분들은 비동기 방식으로 파라미터를 전달받은 후 JSON 형식으로 변환한 후 file_put_contents() 함수를 이용하여 메모장에 작성하여 살펴보시면 됩니다.

예:

{
"gmt_create":"xxxxxxxx",//订单创建时间
"charset":"UTF-8",
"gmt_payment":"xxxxxxxx", //付款时间
"notify_time":"xxxxx",   //异步回调时间
"subject":"XXXXX",     //订单名称
"sign":"xxxxxxxxxxxxxxxxxxx",
"buyer_id":"xxxxxxxx",
"invoice_amount":"xxxxx",
"version":"1.0",
"notify_id":"xxxxxxxxx",
"fund_bill_list":"[{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]",
"notify_type":"trade_status_sync",
"out_trade_no":"xxxxxxxx", //订单号
"total_amount":"0.01",
"trade_status":"TRADE_SUCCESS", //success代表支付成功,商家会收到钱
"trade_no":"xxxxxx", //支付宝流水号
"auth_app_id":"xxxxxxxx",
"receipt_amount":"0.01",
"point_amount":"0.00",
"app_id":"xxxxxxxxx",
"buyer_pay_amount":"0.01",
"sign_type":"RSA2",
"seller_id":"xxxxxxxxxxxxx"
}
중요한 항목은 모두 주석 처리했습니다. 이해하지 못하는 다른 매개변수에 대해서는 공식 문서를 확인하세요. 동기화 방식은 이름 그대로 페이지가 동기적으로 점프할 주소, 즉 고객이 볼 수 있는 페이지입니다. 사용자에게 결제가 성공했음을 알리는 텍스트 등 여기에서 맞춤설정할 수 있습니다. 다음은 비동기식 및 동기식 메서드를 작성하는 방법의 예입니다.

/**
异步同步示例
*/
class alipay extends Controller {
/**
 * 异步方法
 * @return [void] 
 */
public function notify(){
    $post = input();
    if($post['trade_status'] == "TRADE_SUCCESS"){
        //操作数据库 修改状态
        echo "SUCCESS";//返回给支付宝成功 ,不返回这个  字符 ,支付宝定时 回调这个方法 时间 5   10   30/m  1小时 成功为止
    }
    //写在文本里看一下参数
    $data = json_encode($post);
    file_put_contents("alipaytext.txt",$data);
}

/**
 * 同步方法
 * @return [type] [description]
 */
public function returnfy(){
    //同步跳转地址
    return $this->fetch();
}
}

这里面重要的是需要在异步方法里判断trade_status字段,如果等于"TRADE_SUCCESS"即支付成功,后面必须echo返回一个"SUCCESS",否则支付宝会认为你没有付款成功,而在24小时内定时回调这个方法。实际业务逻辑根据你的需求来比如存入订单表等等,当然不会这么简单,最好加一些验证。为了安全。下面是前台代码示例:

{include file="public/header"}
<!-- HEADER END -->
<!-- CONTENT BEGIN -->
<div>
    <div>
        <div>
            <div>    
                <form>
                商户订单号:<input><br>
                订单名称:<input><br>
                付款金额:<input><br>
                商品描述:<input><br>
                <button>付 款</button>
            </form>

            </div>
            {include file="public/right"}

            <div></div>
            <div></div>
        </div>
    </div>
</div>
<!-- CONTENT END -->

<!-- FOOTER BEGIN -->
{include file="public/tail"}

最后补上一句:日志文件一定要开启写权限,否则无法自动写入。即在alipay文件夹下右键log.txt属性设置。出了问题可以在日志里查看。

走到这里,流程就基本介绍完了。欢迎各位大佬拍砖指导。做完支付,会感觉自己又上了一个台阶!

위 내용은 Alipay 컴퓨터 웹사이트 결제를 구현하기 위한 TP5 도입 예시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제