PHP 기반 WeChat 결제 인터페이스 앱 개발

不言
풀어 주다: 2023-03-25 06:50:02
원래의
3103명이 탐색했습니다.

이 글은 주로 PHP 기반의 WeChat 결제 인터페이스 개발을 소개합니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

가맹점 결제 정보 정의

define(APPID, $결제) [ 'appId']); // appid

정의(APPSECRET, $결제 ['appSecret']); // appSecret

정의(MCHID, $지불 ['partnerId']); KEY , $결제 ['partnerKey']); // 암호화된 문자열 전달

Define(NOTIFY_URL, $return_url); // 성공적인 콜백 url

     //签名所需
        $signArray = array(
            'appid' => $payment['appId'], //appid
            'mch_id' => $payment['partnerId'],
            'nonce_str' => self::createNoncestr(),
            'out_trade_no' => $order['order_sn'],           
            'body' => $order['body'],
            "total_fee" => $order ['order_amount'],
            "notify_url" => $return_url,
            "spbill_create_ip" => $_SERVER["REMOTE_ADDR"],
            "trade_type" => "APP",
        );
로그인 후 복사
 $sign=self::getSign($signArray); 
        //统一下单
        $goPay = array(
            'appid' => $payment['appId'], //appid
            'mch_id' => $payment['partnerId'],
            'nonce_str' => $signArray['nonce_str'], //生成随机字符串
            'sign' => $sign,
            'out_trade_no' => $order['order_sn'],            
            "total_fee" => $order ['order_amount'],
             'body' => $order['body'],
            "notify_url" => $return_url,
             "spbill_create_ip" => $_SERVER["REMOTE_ADDR"],
            "trade_type" => "APP",
        );
        //转化xml
        $goPayXml=self::arrayToXml($goPay);
        $result=self::sendPrePayCurl($goPayXml);
        return $result;
로그인 후 복사

임의의 문자열 생성 function

    //随机生成字符串
    public function createNoncestr($length = 32) {
        $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
        $str = "";
        for ($i = 0; $i < $length; $i++) {
            $str.= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return $str;
    }
로그인 후 복사

signature function

    /**
     * 	作用:生成签名
     */
    public function getSign($Obj) {
        foreach ($Obj as $k => $v) {
            //if($k == &#39;code&#39;) continue;
            //if($k == &#39;from&#39;) continue;
            $Parameters[$k] = $v;
        }
        //签名步骤一:按字典序排序参数
        ksort($Parameters);
        $String = self::formatBizQueryParaMap($Parameters, false);
        //echo &#39;【string1】&#39;.$String.&#39;</br>&#39;;
        //签名步骤二:在string后加入KEY
        $String = $String . "&key=" . KEY;       
        //echo "【string2】".$String."</br>";
        //签名步骤三:MD5加密
        $String = md5($String);
        //echo "【string3】 ".$String."</br>";
        //签名步骤四:所有字符转为大写
        $result_ = strtoupper($String);
        //echo "【result】 ".$result_."</br>";
        return $result_;
    }
로그인 후 복사
 //格式化签名所需参数
    public function formatBizQueryParaMap($paraMap, $urlencode) {
        $buff = "";
        ksort($paraMap);
        foreach ($paraMap as $k => $v) {
            if ($urlencode) {
                $v = urlencode($v);
            }
            //$buff .= strtolower($k) . "=" . $v . "&";
            $buff .= $k . "=" . $v . "&";
        }
        $reqPar;
        if (strlen($buff) > 0) {
            $reqPar = substr($buff, 0, strlen($buff) - 1);
        }
        return $reqPar;
    }
로그인 후 복사

요청한 요청 매개변수 어셈블리 xml

	/**
	 * 	作用:array转xml,把请求参数组装xml
	 */
	function arrayToXml($arr)
    {
        $xml = "<xml>";
        foreach ($arr as $key=>$val)
        {
        	 if (is_numeric($val))
        	 {
        	 	$xml.="<".$key.">".$val."</".$key.">"; 

        	 }
        	 else
        	 	$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";  
        }
        $xml.="</xml>";
        return $xml; 
    }
로그인 후 복사
//通过curl发送数据给微信接口的函数
    public function sendPrePayCurl($xmlData) {
        $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
        $header[] = "Content-type: text/xml";
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $xmlData);
        $data = curl_exec($curl);
        if (curl_errno($curl)) {
            print curl_error($curl);
        }
        curl_close($curl);
        return self::XMLDataParse($data);
    }

//xml格式数据解析函数
    public static function XMLDataParse($data) {
        $msg = array();
        $msg = (array) simplexml_load_string($data, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
        return $msg;
    }
로그인 후 복사

관련 추천:

php 개발 영화 웹사이트 비디오 튜토리얼 강좌 소개(iQiyi 모방)

위 내용은 PHP 기반 WeChat 결제 인터페이스 앱 개발의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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