> 백엔드 개발 > PHP 튜토리얼 > 결제 확인 서명 결제에 실패하셨나요? —— WeChat Pay 앱 결제

결제 확인 서명 결제에 실패하셨나요? —— WeChat Pay 앱 결제

ringa_lee
풀어 주다: 2023-03-01 08:32:01
원래의
5555명이 탐색했습니다.

상황 설명:

1. 동일한 주문 인터페이스를 호출하여 prepay_id에 해당하는 값을 얻었습니다!

2. 앱에 데이터를 제출하기 전에 규칙에 따라 2차 서명을 합니다! //내가 작성한 코드가 맞는지 확인해주세요

3. 왜 이런 문제가 발생하나요?

4. 무릎을 꿇고 하나님께 인도를 구하세요!

제 2차 서명 코드는 다음과 같습니다.

........ //매개변수 등 설정

$wx_result = $wechatAppPay->unifiedOrder( $params );//调用同一下单接口,并成功返回结果
 
//开始生成二次签名
$sign_array              = array();//第二次签名需要的参数
$sign_array['appid']     = $wx_result['appid'];
$sign_array['mch_id']    = $wx_result['mch_id'];
$sign_array['prepay_id'] = $wx_result['prepay_id'];
$sign_array['nonce_str'] = $wx_result['nonce_str'];
$sign_array['timeStamp'] = time();
$sign_array['package']   = $wx_result['Sign=WXPay'];
$sign_two = $wechatAppPay->MakeSign($sign_array);//调用签名生成函数
로그인 후 복사

다음은 서명 생성을 위한 함수 코드입니다.

/**
 * 生成签名
 *  @return 签名
 */
public function MakeSign( $params ){
    //签名步骤一:按字典序排序数组参数
    ksort($params);
    $string = $this->ToUrlParams($params);//调用拼接函数
    //签名步骤二:在string后加入KEY
    $string = $string . "&key=".$this->key;
    //签名步骤三:MD5加密
    $string = md5($string);
    //签名步骤四:所有字符转为大写
    $result = strtoupper($string);
    return $result;
}
      /**
     * 将参数拼接为url: key=value&key=value
     * @param   $params
     * @return  string
     */
    public function ToUrlParams( $params ){
        $string = '';
        if( !empty($params) ){
            $array = array();
            foreach( $params as $key => $value ){
                $array[] = $key.'='.$value;
            }
            $string = implode("&",$array);
        }
        return $string;
    }
로그인 후 복사

두 번째 서명의 매개변수 이름이 잘못되어 이 문제가 해결되었습니다.

/////////////////////////////업데이트///////////// /////////////////////////////////////////////// ///// //////////////////////////////////////////// //////// ////////////////////////////////////
하지만 난 그렇지 않아요 콜백을 작성하는 방법을 모르겠습니다! !

값을 받을 수 없고(위챗에서 결제 결과에 대한 일반 알림을 받을 수 없음), 무슨 일이 일어나고 있는지 모르겠습니다

비동기 알림 콜백 받기 WeChat 결제 주소:

$notify_url        = 'http://www.XXXXXX.com/index.php/apps/cart/wxResult';
로그인 후 복사
//微信支付回调函数
public function wxResult()
{
    $data = array();
    $data = $this->wechatAppPay->getNotifyData();//调用获取数据函数
    
    ////////********逻辑处理********//////////
    
 $data2 = $this->wechatAppPay->replyNotify();//接收通知成功后应答输出XML数据
 
 
 $this->jsonmsg($data);
 }
로그인 후 복사

알림 데이터를 얻는 기능:

/**
 * 
 * 获取支付结果通知数据
 * return array
 */
public function getNotifyData(){
    //获取通知的数据
    $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
    $data = array();
    if( empty($xml) ){
        return false;
    }
    $data = $this->xml_to_data( $xml );
    if( !empty($data['return_code']) ){
        if( $data['return_code'] == 'FAIL' ){
            return false;
        }
    }
    return $data;
}
로그인 후 복사

알림을 성공적으로 받은 후 응답하고 XML 데이터를 출력하는 기능:

   /**
     * 接收通知成功后应答输出XML数据
     * @param string $xml
     */
    public function replyNotify(){
        $data['return_code'] = 'SUCCESS';
        $data['return_msg'] = 'OK';
        $xml = $this->data_to_xml( $data );
        echo $xml;
        die();
    }
로그인 후 복사

**해결됨
///////업데이트//////////////////판매자 시스템에서 해당 콘텐츠에 대한 서명 확인을 수행합니다. 결제 결과 알림///////////// ///////////////////**

가맹점 시스템에서 서명을 하고 있습니다 결제결과 알림 내용 확인 방법은 무엇인가요?
무엇인가요? 논리적인 생각은 무엇인가?

응답 내용:

결제 인터페이스 문서

문서에 지정된 필드

appid

partnerid

prepayid

package

noncestr

timestamp

sign
매개변수 이름의 대소문자를 변경하거나 밑줄 등을 추가하지 마세요. 이전에 이 문제가 발생했는데 해결되었습니다.

안녕하세요, 저도 같은 문제를 겪었는데요. 해결하셨는지 궁금합니다.

md5 계산에 매개변수 이름이 포함되나요?

보조 서명의 타임스탬프는 pre_payid가 생성된 타임스탬프입니다


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