PHP는 WeChat 결제 기능 개발 코드 공유를 구현합니다.

小云云
풀어 주다: 2023-03-21 06:46:02
원래의
6522명이 탐색했습니다.

이 글은 주로 PHP WeChat 결제의 개발 과정을 자세히 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.

1. 개발 환경
Thinkphp 3.2.3
WeChat: 서비스 계정, 인증
개발 도메인 이름: http://test.paywechat.com (맞춤 도메인 이름, 외부 네트워크에서 접근 불가)

2 . 관련 파일 및 권한이 필요합니다
활성화를 위해서는 WeChat 결제를 신청해야 합니다.
WeChat 공개 플랫폼 개발자 문서: http://mp.weixin.qq.com/wiki/home/index.html
WeChat 결제 개발자 문서: https: // pay.weixin.qq.com/wiki/doc/api/index.html
WeChat Payment SDK 다운로드 주소: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter= 11_1

3. 개발
WeChat Payment PHP 버전의 SDK를 다운로드합니다. 파일 디렉터리는 다음과 같습니다.

PHP는 WeChat 결제 기능 개발 코드 공유를 구현합니다.

PHP는 WeChat 결제 기능 개발 코드 공유를 구현합니다.

WeChat Payment SDK의 Cert 및 Lib 디렉터리를 Thinkphp에 넣습니다. 디렉터리는

PHP는 WeChat 결제 기능 개발 코드 공유를 구현합니다.입니다.

이제 WeChat 결제 승인 디렉터리 문제를 소개하겠습니다. 먼저 WeChat 결제 개발 구성에서 결제 승인 디렉터리

PHP는 WeChat 결제 기능 개발 코드 공유를 구현합니다.

를 입력한 다음 js 인터페이스 보안을 입력합니다. 필드.

PHP는 WeChat 결제 기능 개발 코드 공유를 구현합니다.

마지막으로 웹 인증 설정

PHP는 WeChat 결제 기능 개발 코드 공유를 구현합니다.

PHP는 WeChat 결제 기능 개발 코드 공유를 구현합니다.

이러한 설정이 완료되면 기본적으로 설정 디렉터리와 내 thinkphp의 디렉터리에 주의하세요.

PHP는 WeChat 결제 기능 개발 코드 공유를 구현합니다.

4. WeChat 결제 구성

PHP는 WeChat 결제 기능 개발 코드 공유를 구현합니다.

해당 구성을 올바르게 입력하세요.




[php] 보기 plain 복사


  1. /**

  2. * 계정 정보 구성

  3. */

  4. WxPayConfig ==========================
  5. //
  6. /* *

  7. * TODO: 본인이 신청한 가맹점 정보를 적용하려면 여기서 구성을 수정하세요

    * WeChat 공개 계정 정보 구성
  8. *
  9. * APPID : 결제가 연결된 APPID (필수 구성, 계좌 개설 이메일에서 확인 가능)
  10. * 보기)
  11. *
  12. * 설정 주소 : https://pay.weixin.qq.com/index.php/account/api_cert

  13. * 퍼블릭 플랫폼에 로그인하고 개발자 센터에서 설정),

  14. * 주소 받기: https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN

  15. * @varstring

  16. */

  17. const APPID = ''

  18. const MCHID = ''

  19. const KEY = '';

  20. const APPSECRET = ''

  21. //========[인증서 경로 설정]================================ =====

  22. /**

  23. *TODO: 판매자 인증서 경로 설정

  24. * 인증서 경로는 절대 경로입니다. 경로를 입력해야 합니다. (환불 또는 주문 취소 시에만 필요하며, 가맹점 플랫폼에 로그인하여 다운로드할 수 있습니다.

  25. *API 인증서 다운로드 주소 : https://pay.weixin.qq.com/index.php/account/api_cert, 다운로드 전 가맹점 운영 인증서 설치 필요)

  26. * @var path

  27. */

  28. const SSLCERT_PATH = '../cert/apiclient_cert' ;

  29. const SSLKEY_PATH = '../cert/apiclient_key.pem'; 프록시 설정】=== =================== ==========

  30. /**
  31. * TODO: 여기서 프록시 머신을 설정하세요. 프록시가 필요하지 않은 경우에만 설정하세요. 프록시가 필요하지 않으면 0.0.0.0 및 0

  32. 으로 설정하세요. 이 루틴은 컬을 사용합니다. HTTP POST 방법을 사용하여 프록시 서버를 여기에서 수정할 수 있습니다.

  33. * 기본 CURL_PROXY_HOST=0.0.0.0 및 CURL_PROXY_PORT=0, 현재 프록시는 켜지지 않습니다(설정됨). 필요한 경우)

  34. * @varknown_type

  35. */

  36. const CURL_PROXY_HOST = "0.0.0.0";//"10.152.18.220";

  37. const CURL_PROXY_PORT = 0;/ /8080;

  38. //=======【신고 정보 구성】================= = =================

  39. /**

  40. * TODO: 인터페이스 호출 보고 수준, 기본 오류 보고(참고: 보고 시간 제한은 [1초], 성공 또는 실패에 관계 없이 보고[예외를 발생시키지 않음],

  41. * 인터페이스 통화 프로세스에는 영향을 미치지 않습니다.) 보고를 활성화한 후에는 WeChat에서 요청 통화 품질을 모니터링하는 것이 편리합니다. 최소한

  42. * 오류 보고를 활성화하는 것이 좋습니다.

  43. * 보고 수준, 0. 보고 종료, 1. 오류만 보고됨 2. 전체 보고

  44. * @var int

  45. */

  46. const REPORT_LEVENL = 1

  47. }

지금 코드 게시를 시작하세요:




[php] 보기 plain copy


  1. namespace WechatController

  2. useThinkCont 롤러;

  3. /**

  4. * 부모 클래스 컨트롤러, 상속 필요

  5. * @file ParentController.class.php

  6. * 게리

  7. * @date 2015년 8월 4일

  8. * @todu

  9. */

  10. classParentController extendsController {

  11. protected$options array (

  12. '토큰 ' => '', // 암호화를 위한 EncodingAESKey 입력

  13. 'appid' => '앱비밀' =>

  14.  '디버그' => 거짓,  

  15.  'logcallback' => ''  

  16.  );   

  17.  public $errCode = 40001;   

  18.  public $errMsg = "접근 금지";   

  19.   

  20.  /** 

  21.  * 获取access_token 

  22.  * @return mixed|boolean|unknown 

  23.  */  

  24.  public function getToken(){  

  25.  $cache_token = S('exp_wechat_pay_token');  

  26.  if(!empty($cache_token)){  

  27.  return $cache_token;  

  28.  }  

  29.  $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s &비밀=%s ';  

  30.  $url = sprintf($url,$this->options['appid'], $this-> ;옵션['appsecret']);   

  31.  $result = $this->http_get($url);  

  32.  $result = json_decode($result,true);   

  33.  if(empty($result)){  

  34.  re 거짓으로 바꾸세요.  

  35.  }   

  36.  S('exp_wechat_pay_token',$result['access_token' ],array('유형' =>'파일','만료'=>3600));  

  37.  return $result['access_token'];  

  38.  }  

  39.   

  40.  /**

  41. * 고객 서비스 메시지 보내기

  42. * @param array $data 메시지 구조 {"touser":"OPENID","msgtype":"news","news": { ...}}

  43. */  

  44.  public function sendCustomMessage( $data){  

  45.  $token = $this->getToken();  

  46.  if (empty($token)) return false;   

  47.  $url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=%s';  

  48.  $url = sprintf($url,$token);  

  49.  $result = $this->http_post($url,self::json_encode($data));  

  50.  if ($result)  

  51.  {  

  52.  $json = json_decode($result,true) ;  

    ???  
  53. $this->errCode = $json['errcode'];   

    $this
  54. ->errMsg = 

    $json['errmsg'];   

    return
  55.  false;  

     }   return

     
  56. $json

    ;  

  57.  }  
  58.  
  59. return

     false;   }  

  60.   

  61.  /**

  62. * 템플릿 메시지 보내기

  63. * @param 알 수 없음 $data

  64. * @return boolean|unknown

  65. */  

  66.  public function sendTemplateMessage($data ){  

  67.  $ token = $this->getToken();  

  68.  if (empty($token)) return false;  

  69.  $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s";  

  70.  $url = sprintf($url,$token);  

  71.  $result = $this->http_post($url,self::json_encode($data));  

  72.  if ($result)  

  73.  {  

  74.  $json = json_decode($result,true);  

    ???  
  75. $this->errCode = $json['errcode'];   

    $this
  76. ->errMsg = 

    $json['errmsg'];   

    return
  77.  false;  

     }   return

     
  78. $json

    ;  

  79.  }  
  80.  
  81. return

     false;   }  

  82.   

  83.   

  84.  public function getFileCache($name){  

  85.  return S($name);  

  86.  }  

  87.   

  88.  /**

  89. * WeChat API는 중국어 이스케이프 json 구조를 지원하지 않습니다.

  90. * @param array $arr

  91. */  

  92.  static function json_encode( $arr) {  

  93.  $parts = array ();  

  94.  $is_list = false;  

  95. //주어진 배열이 숫자형 배열인지 알아보세요

  96.  $keys = array_keys ( $arr );  

  97.  $max_length = count ( $arr ) - 1;  

  98.  if (($keys [0] === 0) && ($keys [$max_length] === $max_length )) { //첫 번째 키가 0이고 마지막 키가 길이인지 확인하세요. 길이가 1 

  99. $is_list = true입니다.  

  100.  for($i = 0; $i count ( $keys ); $i ++) { //각 키가 해당 위치에 해당하는지 확인하세요  

  101.  if($i != $keys  [$i]) { //A 키가 위치 확인 시 실패합니다.  

  102.   $is_list = false; //연관 배열입니다.  

  103.   break;  

  104.  }  

  105.  }  

  106.  }  

  107.  foreach ( $arr as $key => $value ) {  

  108.  if( is_array ( $value )) { //배열에 대한 맞춤 처리  

  109.  if( $is_list)  

  110. $parts [] = self::json_encode ( $value ); /* :재귀: */  

  111.  else  

  112.   $parts [] = '"' . $key . '":' . self::json_encode ( $value ); /* :재귀: */  

  113.  } else {  

  114.  $str = '';  

  115.  if (! $is_list)  

  116.   $str =  '"' . $key .  '":';  

  117.  //여러 데이터 유형에 대한 맞춤 처리  

  118.  if (!is_string ( $value ) && is_numeric ( $value ) && $value

  119.   $str .= $value//Numbers  

  120.  elseif ($value === false)  

  121.  $str .= '거짓' //부울  

  122.  elseif ($value === true)  

  123.  $str .= '참' ;  

  124.  else  

  125.   $str .= '"' . 슬래시 추가  ( $value ) .  '"' //기타 모든 것  

  126.  // :TODO: 우리가 주의해야 할 데이터 유형이 더 있나요? (개체?)  

  127.  $parts [] = $str;  

  128.  }  

  129.  }  

  130.  $json = 내파( $parts );  

  131.  

    if ($is_list)  

  132. return '[' $json ']'//숫자 JSON 반환

  133. 반품 '{' . $json . '}'}

    /**
  134. +--------- --------------- ------------

  135. * 임의의 문자열 생성

  136. +------ ------------- ------------------------ ----

  137. * @param int $length 생성할 랜덤 문자열의 길이

  138. * @param string $type 랜덤 코드 유형: 0, 숫자 + 대문자 및 소문자 ;1, 숫자 2, 소문자; 3, 대문자 4, 특수 문자 -1, 숫자 + 대문자 및 소문자 + 특수 문자

  139.  +------------------------------- -------------- 

  140.  * @return string 

  141.  +--------------- ------------------------------ 

  142.  */  

  143.  static public function randCode($length = 5 , $type = 2){  

  144.  $arr = array(1 => "0123456789", 2=> "abcdefghijklmnopqrstuvw xyz", 3 => "ABCDEFGHIJKLMNOPQRSTUVWXYZ" , 4 =>  "~@#$%^&*(){}[]|");  

  145.  if ($type == 0) {  

  146.  array_pop($arr);  

  147.  $string = implode(""$arr);  

  148.  } elseif ($type == "-1") {  

  149.  $string = 폭파("" $arr);  

  150.  } else {  

  151.  $string = $arr[ $type];  

  152.  }  

  153.  $count = strlen($string) - 1;  

  154.  $code = '';  ㅋㅋㅋ ++) {  

  155.  $code .= $string[rand(0, $count)];   }  

  156.  return $code;  

     }   
  157.   
  158.    /**

     
  159.  * GET 请求 

  160.  * @param string $url 

  161.  */  

  162.  비공개 기능 http_get($url){  

  163.  $oCurl = curl_init();  

  164.  if(stripos($url,"https://")!==FALSE){  

  165. curl_setopt ($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);  

  166.  curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);  

  167.  curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1  

  168.  }  

  169.  curl_setopt($oCurl, CURLOPT_URL, $url);  

  170.  curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );  

  171.  $sContent = curl_exec($oCurl);  

  172.  $aStatus = curl_getinfo($oCurl);  

  173.  curl_close($oCurl);  

  174.  if(intval($aStatus["http_code"])==200){  

  175.  반품 $sContent;  

  176.  }else{  

  177.  return false;  

  178.  }  

  179.  }  

  180.   

  181.  /**

  182. * POST 요청

  183. * @param string $url

  184. * @ param 배열 $param

  185. * @param boolean $post_file 파일 업로드 여부?*/  

  186.  비공개

  187.  
  188. 기능  http_post($url,

  189. $param
  190. ,$post_file=false){   $oCurl = curl_init();  

  191.  if(stripos($url,"https://")!==FALSE){  

  192.  curl_setopt($ oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);  

  193.  curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);  

  194.  curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1  

  195.  }  

  196.  if (is_string ($param) ||  $post_file) {  

  197.  $strPOST = $param;  

  198.  } else {  

  199.  $aPOST = array();  

  200.  foreach($param as $key=>$val ){  

  201.  $aPOST [] = $key."=".urlencode($val);  

  202.  }  

  203.  $strPOST = join("&"$aPOST);  

  204.  }  

  205.  curl_setopt($oCurl, CURLOPT_URL, $url);  

  206.  curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );  

  207.  curl_setopt($oCurl, CURLOPT_POST,true);  

  208.  curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST);  

  209.  $sContent = curl_exec($oCurl);  

  210.  $aStatus = curl_getinfo($oCurl);  

  211.  curl_close($oCurl);  

  212.  if(intval($aStatus["http_code"])==200){  

  213.  반품 $sContent;  

  214.  }else{  

  215.  return false;  

  216.  }  

  217.  }  

  218. }  




[php] 보기 plain복사


  1. 네임스페이스 WechatController;  

  2. use WechatControllerParentController;  

  3. /**

  4. * WeChat 결제 테스트 컨트롤러

  5. * @file TestController.class.php

  6. * @author Gary

  7. * @date 2015년 8월 4일

  8. * @todu

  9. */  

  10. class TestController extends ParentController {  

  11.  private $_order_body  = 'xxx';  

  12.  private $_order_goods_tag = 'xxx';  

  13.  public function __construct(){  

  14.  parent::__construct();  

  15.  require_once ROOT_PATH."Api/lib/WxPay.Api.php";  

  16.  require_once ROOT_PATH."Api/lib/WxPay.JsApiPay.php";  

  17.  }  

  18.   

  19. public functionindex(){

  20. //①, 사용자 openid 가져오기

  21. $tools = new JsApiPay();

  22. $openId = $tools->GetOpenid()

  23. //②、통합주문

  24. $input = new WxPayUnifiedOrder()

  25. $input-> $this

  26. ->_order_body
  27. //추가 데이터, 필요한 데이터를 추가할 수 있습니다. WeChat은 비동기 콜백을 반환할 때 이 데이터를 추가합니다.

  28. $input->SetAttach('xxx')

  29. $out_trade_no = WxPayConfig::MCHID. date

    (
  30. "YmdHis "

    ); $out_trade_no); //Total amount, 주문 총액은 정수만 가능하며 단위는 센트입니다.

  31. $input->SetTotal_fee(1)

  32. //거래 시작 시간

  33. $input ->SetTime_start(날짜 (

  34. "YmdHis"
  35. ))

  36. //거래 종료 시간
  37. $input->SetTime_expire(date("YmdHis", time() + 600))

  38. //제품마크

  39. $input->SetGoods_tag($this->_order_goods_tag)

  40. //아니요 인증 주소, WeChat 결제 비동기 알림 수신 콜백 주소 SITE_URL = http : //test.paywechat.com/wharge

  41. $ notify_url = index.php/test/notify.html';

    $input
  42. ->SetNotify_url(

    $notify_url) $input

    ->
  43. );
  44. $order = WxPayApi::unifiedOrder($input)

  45. $jsApiParameters = $tools->GetJsApiParameters($ order);

  46. //공유 배송 주소 js 함수 매개변수 가져오기

  47. $editAddress = $ tools->GetEditAddressParameters() ; );

  48. $this

  49. ->할당(
  50. 'jsApiParameters',$jsApiParameters); , $editAddress )

  51. $this->display()

  52. }

  53. /**
  54. * 비동기 알림 콜백 방식
  55. */
  56. API/lib/ inform.php";

  57. $notify = new PayNotifyCallBack();

  58. $not ify->핸들(false)

  59. //IsSuccess는 제가 사용자 정의한 방법입니다. 나중에 참조용으로 이 파일의 코드를 게시하겠습니다.

    $is_success

    =
  60. $notify

    ->IsSuccess();

  61. $bdata = $is_success['data'];

  62. if (

    $is_success
  63. [

    'code'] == 1){ $news =

    array
  64. (

    ' touser' =>

    $bdata
  65. [

    'openid'], '뉴스',

  66. '뉴스' = > 배열 (

  67. 'articles'=> 'title'

  68. =>
  69. ' ​​주문 결제가 완료되었습니다.',

  70. '설명' => "결제 금액: {$bdata['total_fee']}n".

  71. "WeChat 주문 번호: {$bdata['transaction_id']}n" 'picurl'

  72. =>
  73. '',

  74. 'url' => ''

  75. ) )

    )

    )
  76. //WeChat 결제 알림 보내기

  77. $this->sendCustomMessage($news);

  78. }else {//결제 실패

  79. }

  80. }

  81. /**

  82. * 결제 성공 페이지

  83. * 신뢰할 수 없는 콜백

  84. * //주문 번호

  85. $out_trade_no = I('post.out_trade_no')

  86. //결제금액

  87. $total_fee = I('post.total_fee')

  88. /*관련 논리 처리 ***

    [xhtml]
  89. 보기 plain
  90. copy


html

>


head

>

  • meta http-equiv="content-type"content="text/html;charset=ut f- 8인치 ; ="width=device-width,initial-scale=1"

  • />
  • title> 위챗 결제 샘플 - 결제 title>

  • script type="text/javascript">

  • //WeChat JS API 결제 호출

  • functionjsApiCall()

  • {$jsApiParameters},

  • 함수(res){

  • WeixinJSBridge.log(res.err_msg);

  • //취소 결제

  • if(res.err_ms g

  • == 'get_brand_wcpay_request:cancel' ;
  • / *프론트 엔드 반품을 판단하려면 위의 방법을 사용하세요. WeChat 팀은 다음 사항을 엄숙히 상기시킵니다.
  • res.err_msg는 사용자가 성공적으로 결제한 후 확인을 반환하지만 이것이 절대적으로 신뢰할 수 있다고 보장하지는 않습니다.
  • 여기에서 Ajax 제출을 사용하여 일부 로그를 처리할 수 있습니다. , 예를 들어 테스트 컨트롤러의 ajax_PaySuccess 메서드)

  •  }  

  •   

  •  함수 callpay()  

  •  {  

  •  if (유형 WeixinJSBridge == "정의되지 않음"){  

  •  if( document.addEventListener ){  

  •  document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);  

  •  }else if (document.attachEvent){  

  •  document.attachEvent('WeixinJSBridgeReady', jsApiCall);   

  • document.attachEvent('onWeixinJSBridgeReady', jsApiCall);  

  •  }  

  •  }else{  

  •  jsApiCall();  

  •  }  

  •  }  

  •  //获取共享地址  

  •  함수 editAddress()  

  •  {  

  •  WeixinJSBridge. 호출(  

  •  'editAddress',  

  •  {$editAddress},  

  •  함수(res){  

  •  var value1 = res .proviceFirstStageName;  

  •  var value2 = res.addressCitySecondStageName;  

  •  var value3 = res.addressCountiesThirdStageName;  

  •  var value4 = res.addressDetailInfo;  

  •  var tel = res.telNumber;   

  •  alert(value1 + value2 + value3 + value4 + ":" + tel);  

  •  }  

  •  );  

  •  }  

  •   

  •  window.onload = function(){  

  •  if (유형은 WeixinJSBridge == "정의되지 않음"){  

  •  if( document.addEventListener ){  

  •  document.addEventListener('WeixinJSBridgeReady', editAddress, false);  

  •  }else if (document.attachEvent){  

  • document.attachEvent('WeixinJSBridgeReady', editAddress);   

  • document.attachEvent('onWeixinJSBridgeReady', editAddress);  

  •  }  

  •  }else{  

  •  editAddress();  

  •  }  

  •  };  

  •   

  •  script>  

  • head>  

  • body>  

  •  br/>  

  • font color="#9ACD32">b> 이 주문의 결제 금액은 < ;spanstyle="color:#f00;font-size:50px">1포인트span> b> font> />

  •  p align="center">  

  •  버튼 style= "너비:210px; 높이:50px; 테두리 반경: 15px;배경 색상:#FE6714; 테두리:0px #FE6714 단색; 커서: 포인터; 색상: 흰색; 글꼴 크기:16px;"  type="버튼" onclick="callpay()" >立即支付 버튼>  

  •  p>  

  • body>

  • html>

  • notify.php 파일 코드는 여기 공식 문서에 새롭게 추가된 커스텀 메소드가 있습니다.




    [php] 보기 plain copy


    1. require_onceROOT_PATH."Api/lib/WxPay.Api.php";

    2. require_onceROOT_PATH .'Api/lib/WxPay.Notify.php' ;

    3. //초기화 로그 CLogFileHandler(ROOT_PATH.

      "/logs/"
    4. .

      date( 'Y-m-d'). '.log') $logHandler , 15) {

    5.  protected $para = array('code'=>0,'data'=> '') ;  

    6.  //查询订单  

    7.  public function 쿼리순서( $transaction_id)  

    8.  {  

    9.  $input = new WxPayOrderQuery();  

    10.  $input->SetTransaction_id($transaction_id);  

    11.  $result = WxPayApi::orderQuery($input);  

    12.  로그::DEBUG("query:" . json_encode($result));  

    13.  if(array_key_exists("return_code"$result)  

    14.  && array_key_exists("result_code "$result)  

    15.  && $result["return_code"] == "성공"   

    16.  && $result["result_code"] == "SUCCESS")  

    17.  {  

    18.  return 참;  

    19.  }  

    20. $this->para['code'] = 0;

    21. $this->para[ '데이터' ] = '';

    22. return false; ​​

    23. //콜백 처리 함수 다시 작성
    24. public function

      NotifyProcess(
    25. $data

      , &$msg) { 로그: :DEBUG(

      "콜백:"
    26. .json_encode(

      $data

      )) ();
    27. if(!array_key_exists("transaction_id", $data )){

    28. $msg = "입력 매개변수가 잘못되었습니다."

    29. $this->para['code'] = 0; $ this

    30. ->para[
    31. 'data'] = ''; return

    32. false;
    33. //주문을 확인하고 주문의 진위 여부를 판단합니다

    34. if(!$this->Queryorder($data["transaction_id"])){

    35. $msg = "주문 쿼리 실패"

    36. $this->para['code'] = 0; $이것

    37. ->para[
    38. 'data'] = ''; return

    39. false;
    40. $this

      ->para[
    41. 'code'

      ] = 1

    42. ;
    43. $this->para['data'] = $data

    44. return

      사실

    45. }
    46. /**

    47. * WeChat의 콜백이 성공했는지 여부를 감지하는 사용자 정의 메소드

    48. * @return multitype : 숫자 문자열

    49. */

    50. public

      function IsSuccess(){

    51. return

      $this->para; 기본적으로 완료되었으며 WeChat에서 열 수 있습니다. http://test.paywechat.com/Charge/index.php/Test/index /

    52. 관련 추천:

      WeChat 결제 기능의 nodejs 구현에 대한 자세한 설명

      Thinkphp는 WeChat 결제 기능을 통합합니다.

      이 WeChat 결제 기능을 PC 웹 사이트에 추가하는 방법

    위 내용은 PHP는 WeChat 결제 기능 개발 코드 공유를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿