WeChat 결제 인터페이스는 이제 API 인터페이스를 사용하여 결제용 제3자 웹사이트나 애플리케이션을 구현할 수 있는 Alipay와 유사해지고 있습니다. 다음은 테스트를 마친 PHP WeChat 결제 인터페이스 개발 프로그램입니다. .
php WeChat 결제 인터페이스 개발 프로그램 설명:
필수 조건:
appid //공식 계정 백엔드 개발자 센터에서 받기 (이메일 내용과 동일)
mchid//이메일에서 받기
key// 판매자 백엔드는 자체적으로 설정됩니다
appsecret //공식 계정 개발자 센터에서
두 개의 인증서 파일을 획득하고, apiclient_cert.pem 및 apiclient_key.pem은 이메일로 획득됩니다
참고:
WeChat 결제 공식 계정 백엔드 -》개발 구성-》새 테스트 디렉터리 및 개인 WeChat 계정을 테스트합니다.
개발자 센터-》기본 사용자 정보를 얻기 위한 웹페이지 인증-》테스트 도메인 이름으로 변경합니다. 그렇지 않으면 리디렉션_uri 매개변수 오류가 발생합니다
——————————향후 개선 예정——————-
WeChat 결제 준비 페이지는 백그라운드에서 자체적으로 세 가지 작업을 수행했습니다.
1. Get openid
//使用jsapi接口 代码如下复制代码 $jsApi = new JsApi_pub(); //=========步骤1:网页授权获取用户openid============ //通过code获得openid if (!isset($_GET['code'])) { //触发微信返回code码 $url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL); //echo $url; Header("Location: $url"); }else { //获取code码,以获取openid $code = $_GET['code']; $jsApi->setCode($code); $openid = $jsApi->getOpenid(); }
저도 처음 시작할 때 첫 번째 단계에서 openid를 얻을 수 없는 문제가 일부 서버에서 발생했습니다.
내 서버 컬을 검색할 수 없다는 것이 이상합니다. 이후 file_get_contents로 변경되어 정상적으로 얻을 수 있게 되었다.
그러나 이것은 해결책이 아닙니다. 나중에 더 많은 컬 작업이 필요하기 때문입니다.
개발 문서에서 인증서 작업에는 libcurl 7.20.1 이상이 필요하다고 쓰여 있는 곳을 보았는데, 그 후 Linux의 PHP Curl 버전을 개선하기 위해 서버 작업을 해왔습니다. 결국 다른 Windows 서버로 전환했습니다.
당분간은 이렇게 하고 다음에 필요할 때 디버깅해 보겠습니다.
두 번째 단계: 주문 번호 ID를 받아 결제하세요
코드는 다음과 같습니다
$unifiedOrder = new UnifiedOrder_pub(); //var_dump($unifiedOrder); //设置统一支付接口参数 //设置必填参数 //appid已填,商户无需重复填写 //mch_id已填,商户无需重复填写 //noncestr已填,商户无需重复填写 //spbill_create_ip已填,商户无需重复填写 //sign已填,商户无需重复填写 $unifiedOrder->setParameter("openid","$openid");//商品描述 $unifiedOrder->setParameter("body","贡献一分钱");//商品描述 //自定义订单号,此处仅作举例 $timeStamp = time(); $out_trade_no = WxPayConf_pub::APPID."$timeStamp"; $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号 $unifiedOrder->setParameter("total_fee","1");//总金额 $unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址 $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型 //非必填参数,商户可根据实际情况选填 //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号 //$unifiedOrder->setParameter("device_info","XXXX");//设备号 //$unifiedOrder->setParameter("attach","XXXX");//附加数据 //$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间 //$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间 //$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记 //$unifiedOrder->setParameter("openid","XXXX");//用户标识 //$unifiedOrder->setParameter("product_id","XXXX");//商品ID $prepay_id = $unifiedOrder->getPrepayId(); //echo 'prepay_id:'; var_dump($prepay_id);
이 단계에도 많은 문제가 발생했습니다.
우선 위챗 결제는 테스트가 어렵고, 위챗 내에서만 테스트가 가능합니다. 저는 그냥 휴대폰으로 스와이프해서 사용하고 있어요.
둘째, 디버깅을 위해 var_dump를 사용하는 것은 쉽지 않습니다. 일부 파일을 xml 형식으로 인쇄하면 내용이 아닌 문자 길이만 표시됩니다. 그래서 서버 디버깅을 위해 로그 형태로 작성했습니다.
코드는 다음과 같습니다
// 打印log function log_d($word) { $log_name="./logd.log";//log文件路径 $fp = fopen($log_name,"a"); flock($fp, LOCK_EX) ; fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."n".$word."nn"); flock($fp, LOCK_UN); fclose($fp); }
WxPayPubHelper.php에서 호출하려면 $this->log_d(xxx)를 사용하세요. 데모에서.
처음에는 mchid와 appid가 일치하지 않아서 계속 오류가 나더군요. . 그들은 나에게 잘못된 계좌번호를 주었습니다. 처음에는 무작위로 시도하는 방법을 몰랐습니다. 이 디버깅 단계에서는 getPrepayId()의 var_dump($this->result);에서 오류 코드를 볼 수 있습니다.
3단계: 결제 프론트엔드 js 코드를 생성하여 웹페이지에 올려주세요:
코드는 다음과 같습니다
$jsApi->setPrepayId($prepay_id); $jsApiParameters = $jsApi->getParameters();
————————-클릭하여 이동 to Payment————————-
이 부분에서 또 다른 문제가 발생했습니다.
android는 "System: Access_denied"를 반환하고 ios는 "access_control:not_allowed"를 반환합니다
Baidu에서 많이 검색했습니다. . 사실 저는 이 일을 오랫동안 보았지만 전혀 눈치 채지 못했습니다!
인증 요청을 시작하는 페이지는 인증 디렉터리에 있어야 하며 하위 디렉터리에 존재할 수 없습니다. 그렇지 않으면 오류가 발생합니다
결제 파일을 /도메인 이름/pay/demo/에 넣었습니다
처음에는 계속 /도메인 이름/pay/끝까지 가니 충분하다고 생각했습니다. 하위 디렉터리를 지원하면 결과가 불가능합니다! .
————————드디어 아래 사진을 보세요————
wxpay1
wxpay3
wxpay2
——————xmljs 작업 중————————
To 제출됨 주문 ID 생성 및 결제:
코드는 다음과 같습니다
<xml> <openid><![CDATA[ou9dHt0L8qFLI1foP-kj5x1mDWsM]]></openid> <body><![CDATA[贡献一下]]></body> <out_trade_no><![CDATA[wx88888888888888881414411779]]></out_trade_no> <total_fee>1</total_fee> <notify_url><![CDATA[http://shanmao.me/wxpay/notify_url.php]]></notify_url> <trade_type><![CDATA[JSAPI]]></trade_type> <appid><![CDATA[wx8888888888888888]]></appid> <mch_id>10012345</mch_id> <spbill_create_ip><![CDATA[61.50.221.43]]></spbill_create_ip> <nonce_str><![CDATA[60uf9sh6nmppr9azveb2bn7arhy79izk]]></nonce_str> <sign><![CDATA[2D8A96553672D56BB2908CE4B0A23D0F]]></sign> </xml>
제출 후 반환이 정확하며 여기에는 perpay_id:
<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[wx8888888888888888]]></appid> <mch_id><![CDATA[10012345]]></mch_id> <nonce_str><![CDATA[Be8YX7gjCdtCT7cr]]></nonce_str> <sign><![CDATA[885B6D84635AE6C020EF753A00C8EEDB]]></sign> <result_code><![CDATA[SUCCESS]]></result_code> <prepay_id><![CDATA[wx201410272009395522657a690389285100]]></prepay_id> <trade_type><![CDATA[JSAPI]]></trade_type> </xml>
JS를 통한 결제 생성:
{ "appId": "wx8888888888888888", "timeStamp": "1414411784", "nonceStr": "gbwr71b5no6q6ne18c8up1u7l7he2y75", "package": "prepay_id=wx201410272009395522657a690389285100", "signType": "MD5", "paySign": "9C6747193720F851EB876299D59F6C7D" }가 포함됩니다.
결제 성공 후 알림 반환 xml:
<xml><appid><![CDATA[wx8888888888]]></appid> <bank_type><![CDATA[CCB_DEBIT]]></bank_type> <fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[Y]]></is_subscribe> <mch_id><![CDATA[1011111]]></mch_id> <nonce_str><![CDATA[38gt0ffgsvfsdfsdfbt1981duv63p7]]></nonce_str> <openid><![CDATA[o4p3SjfdsfdsfdsdCE5Y2XHw4]]></openid> <out_trade_no><![CDATA[wx4b56d1fsdfdsf416643247]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[356EfsdfdsfsdsfE69509EDA344]]></sign> <sub_mch_id><![CDATA[10018826]]></sub_mch_id> <time_end><![CDATA[20141122160122]]></time_end> <total_fee>1</total_fee> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[100715001020fsdfsd1220006123174]]></transaction_id> </xml>
요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되길 바랍니다.
관련 추천:
위 내용은 PHP로 WeChat 결제 인터페이스 개발 프로그램을 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

절대 세션 시간 초과는 세션 생성시 시작되며, 유휴 세션 시간 초과는 사용자가 작동하지 않아 시작합니다. 절대 세션 타임 아웃은 금융 응용 프로그램과 같은 세션 수명주기의 엄격한 제어가 필요한 시나리오에 적합합니다. 유휴 세션 타임 아웃은 사용자가 소셜 미디어와 같이 오랫동안 세션을 활성화하려는 응용 프로그램에 적합합니다.

서버 세션 고장은 다음 단계를 따라 해결할 수 있습니다. 1. 서버 구성을 확인하여 세션이 올바르게 설정되었는지 확인하십시오. 2. 클라이언트 쿠키를 확인하고 브라우저가 지원하는지 확인하고 올바르게 보내십시오. 3. Redis와 같은 세션 스토리지 서비스가 정상적으로 작동하는지 확인하십시오. 4. 올바른 세션 로직을 보장하기 위해 응용 프로그램 코드를 검토하십시오. 이러한 단계를 통해 대화 문제를 효과적으로 진단하고 수리 할 수 있으며 사용자 경험을 향상시킬 수 있습니다.

session_start () iscrucialinphpformanagingUsersessions.1) itiniteSanewsessionifnoneexists, 2) ResumesAnxistessions, and3) setSasessionCookieForContInuityAcrosrequests, enablingplicationsirecationSerauthenticationAndpersonalizestContent.

XSS 공격을 효과적으로 방지하고 사용자 세션 정보를 보호 할 수 있기 때문에 httponly 플래그를 설정하는 것은 세션 쿠키에 중요합니다. 구체적으로, 1) httponly 플래그는 JavaScript가 쿠키에 액세스하는 것을 방지합니다. 2) PHP 및 Flask에서 SetCookies 및 Make_response를 통해 깃발을 설정할 수 있습니다. 3) 모든 공격으로부터 방지 할 수는 없지만 전체 보안 정책의 일부가되어야합니다.

phpssessionssolvetheproblemofmainingstateacrossmultiplehtttprequestsbystoringdataontheserversociatingititwithauniquessessionid.1) theStoredAserver-side, 일반적으로, 일반적으로 and insessionsecietoretoretrievedata.2) sessionsenhances

phpsessionscanstorestrings, 숫자, 배열 및 객체 1.Strings : TextDatalikeUsernames.2.numbers : integorfloatsforcounters.3.arrays : listslikeshoppingcarts.4.objects : complexStructuresThatareserialized.

세션 재생은 세션 고정 공격의 경우 사용자가 민감한 작업을 수행 할 때 새 세션 ID를 생성하고 이전 ID를 무효화하는 것을 말합니다. 구현 단계에는 다음이 포함됩니다. 1. 민감한 작업 감지, 2. 새 세션 ID 생성, 3. 오래된 세션 ID 파괴, 4. 사용자 측 세션 정보 업데이트.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
