国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

微信小程序支付全問題解決

Tecode / 1064人閱讀

摘要:這幾天在做小程序的支付,沒有用官方的,這里就純用官方的文檔搞一發(fā)。

這幾天在做小程序的支付,沒有用官方的SDK,這里就純用官方的文檔搞一發(fā)。

* 注作者使用的PHP,不過支付流程都是這樣

開發(fā)前必讀 主要流程

小程序前端發(fā)送求參請(qǐng)求

接受請(qǐng)求封裝 “統(tǒng)一下單” 獲取package

小程序接受 “統(tǒng)一下單” 獲取的package值帶入wx.requestPayment發(fā)起支付請(qǐng)求

準(zhǔn)備工具

申請(qǐng)小程序微信支付

拿到小程序微信支付的商戶號(hào)及設(shè)置秘鑰

注意:小程序就只需要這兩步,如果是web的話還需要設(shè)置支付目錄授權(quán)域名,文檔里面也有寫的:https://pay.weixin.qq.com/wik...


統(tǒng)一下單
官方文檔:https://pay.weixin.qq.com/wik...
/**
 * 統(tǒng)一訂單
 */
public function unifiedorder(){
    // 以下配置是必填項(xiàng),如有其它需求請(qǐng)自行配置
    $config = array(
        "appid"         =>    "xxxxxxx",//這里是小程序appid
        "mch_id"        =>    "xxxxxxx",//商戶ID
        "nonce_str"     =>    $this->getNonceStr(),//隨機(jī)字符串
        "body"          =>    "這里是測(cè)試 - 測(cè)試",//請(qǐng)按照文檔要求填寫合格名稱
        "out_trade_no"  =>    time().$this->getNonceStr(2),//流水單號(hào)
        "total_fee"     =>    "20",//金額,分為單位,這里是0.2元
        "spbill_create_ip" => "123.123.123.123",//當(dāng)前IP
        "notify_url"    =>    "http://xxxx.com",//請(qǐng)恕我愚昧,我沒搞懂他有什么用
        "trade_type"    =>    "JSAPI",//必須填寫JSAPI
        "openid"        =>    "xxxxxxxx"http://當(dāng)前用戶的openid,在trade_type=JSAPI的時(shí)候,此項(xiàng)就變成必填項(xiàng)了
    );
    $config["sign"] = $this->getSignPay($config);
    $xmlData = $this->ToXml($config);//轉(zhuǎn)成xml數(shù)據(jù)
    $postData = $this->http_post($xmlData);
    $arrayData = $this->FromXml($postData);
    if($arrayData["return_code"] == "SUCCESS" || $arrayData["result_code"] == "SUCCESS"){
        return $arrayData["prepay_id"];//重點(diǎn)來了:走了這么多路,就為了這個(gè)值。到這一步就證明成功一多半了。
    }else{
        return $arrayData;//返回錯(cuò)誤
    }
}

/**
 * 獲取簽名
 */
public function getSignPay($config){
    $key = "xxxxxxx";//商戶秘鑰,就是自己生成的32位密碼
    $strA = "appid=".$config["appid"]."&body=".$config["body"]."&mch_id=".$config["mch_id"]."&nonce_str=".$config["nonce_str"]."¬ify_url=".$config["notify_url"]."&spbill_create_ip".$config["spbill_create_ip"]."&total_fee=".$config["total_fee"]."&trade_type=".$config["trade_type"];//ASCII 字典序
    $strB = $strA."&key=".$key;
    $sign = strtoupper(md5($strB));//大寫MD5
    return $sign;
}

/**
 * 隨機(jī)字符串 32位
 */
public function getNonceStr($length = 32){
    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";  
    $str ="";
    for ( $i = 0; $i < $length; $i++ )  {  
        $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);  
    } 
    return $str;
}

/**
 * array轉(zhuǎn)XML
 */
public function ToXml($data){
    if(!is_array($data) || count($data) <= 0){
        throw new WxPayException("數(shù)組數(shù)據(jù)異常!");
    }
    $xml = "";
    foreach ($data as $key=>$val){
        $xml.="<".$key.">".$val."";
    }
    $xml.="";
    return $xml; 
}

/**
 * xml轉(zhuǎn)array
 */
public function FromXml($xml){    
    if(!$xml){
        throw new WxPayException("xml數(shù)據(jù)異常!");
    }
    libxml_disable_entity_loader(true);
    $this->values = json_decode(json_encode(simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA)), true);
    return $this->values;
}


/**
 * post 請(qǐng)求
 */
public function http_post($url,$param,$post_file=false){
    $oCurl = curl_init();
    if(stripos($url,"https://")!==FALSE){
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
    }
    if (PHP_VERSION_ID >= 50500 && class_exists("CURLFile")) {
        $is_curlFile = true;
    } else {
        $is_curlFile = false;
        if (defined("CURLOPT_SAFE_UPLOAD")) {
            curl_setopt($oCurl, CURLOPT_SAFE_UPLOAD, false);
        }
    }
    if (is_string($param)) {
        $strPOST = $param;
    }elseif($post_file) {
        if($is_curlFile) {
            foreach ($param as $key => $val) {
                if (substr($val, 0, 1) == "@") {

                }
            }
        }
        $strPOST = $param;
    } else {
        $aPOST = array();
        foreach($param as $key=>$val){
            $aPOST[] = $key."=".urlencode($val);
        }
        $strPOST =  join("&", $aPOST);
    }
    curl_setopt($oCurl, CURLOPT_URL, $url);
    curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt($oCurl, CURLOPT_POST,true);
    curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST);
    $sContent = curl_exec($oCurl);
    $aStatus = curl_getinfo($oCurl);
    curl_close($oCurl);
    if(intval($aStatus["http_code"])==200){
        return $sContent;
    }else{
        return false;
    }
}

好了現(xiàn)在已經(jīng)獲取到了 prepay_id 的值,我們的統(tǒng)一下單就算完成了,其實(shí)我更樂意叫他數(shù)據(jù)封裝


小程序微信支付
官方文檔:https://developers.weixin.qq....

先來一個(gè)插曲,首先我們小程序的前端需要去觸發(fā)pay,實(shí)現(xiàn)的功能肯定是要點(diǎn)擊小程序的一個(gè)觸發(fā),然后才能支付對(duì)吧,

pay:function(e){
    //這里面使用post去請(qǐng)求。然后通過我接下來要寫的API支付代碼獲取小程序支付參數(shù)
    success:function(res){
         wx.requestPayment({
             "timeStamp":toString(res.timeStamp),//這里轉(zhuǎn)字符串,這里被坑過,不轉(zhuǎn)的話可能會(huì)出現(xiàn)total_fee為空
             "nonceStr":toString(res.nonceStr),
             "package":toString(res.package),
             "signType":"MD5",
             "paySign":toString(res.paySign),
             success:function(res){
                 console.log(res);//這里可以跳轉(zhuǎn)到帶參地址
             },
             fail:function(res){
                 console.info("支付失敗",res);
             },
             complete:function(){
                 console.info("支付觸發(fā)回調(diào)",res);
             }
         })  
    }
       
}
api支付

也就是上面小程序代碼的后端請(qǐng)求地址

/**
 * api組裝數(shù)據(jù)
 */
public function payApiBlack(){
    $appid = "xxxxxx";//小程序appid,上面有重復(fù),不過這樣比較直觀
    $timeStamp = time();
    $nonceStr = $this->getNonceStr();//這是調(diào)用統(tǒng)一下單里面的方法,為了直觀,我把這些代碼都寫在了一個(gè)類里
    $package = "prepay_id=".$this->unifiedorder();
    $signType = "MD5";
    $key = "xxxxxx";//這里是商戶秘鑰,32位,同上面也有
    $strA = "appId=".$appid."&nonceStr=".$nonceStr."package=".$package."&= signType=".$signType."&timeStamp=".$timeStamp."&key=".$key;
    $paySign = strtoupper(md5($strA));
    $data = array(
        "appid"=>$appid,
        "timeStamp"=>$timeStamp,
        "nonceStr"=>$nonceStr,
        "package"=>$package,
        "signType"=>$signType
    );
    return $data;//返回給小程序
}

以上就是全部代碼,還有小程序的支付回調(diào)沒有什么信息,所以,我的思路判斷success后進(jìn)行跳轉(zhuǎn)帶參

//此代碼為wx.requestPayment success,部分代碼省略
//res 回調(diào)參數(shù)包括用戶uid及其他重要傳遞
success:function(res){
    wx.redirect({
        url:"pages/pay/done?uid="+res.uid
    })
}

當(dāng)然那個(gè)統(tǒng)一下單的 notify_url 好像與回調(diào)有關(guān),至于怎么用,試了幾次回調(diào)的CURD都沒反應(yīng),所以有空再研究啦。

以上代碼僅作為支付流程解釋,所以真正要用到項(xiàng)目上,還是去套官方的SDK吧,畢竟涉及到錢嘛

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/29155.html

相關(guān)文章

  • 行業(yè)log | 小程序搭載智慧零售,實(shí)現(xiàn)五位一體數(shù)字化營(yíng)銷

    摘要:零售商家通過微信支付小程序?qū)崿F(xiàn)線上線下消費(fèi)一體化,通過線上支付線下單品完成商品數(shù)據(jù)的打通。因此小程序搭載智慧零售,能助力商家實(shí)現(xiàn)消費(fèi)場(chǎng)景數(shù)字化以及購買行為具象化,從新的維度提高用戶服務(wù)水平。 隨著移動(dòng)互聯(lián)網(wǎng)、大數(shù)據(jù)、AI等技術(shù)日益成熟,實(shí)體行業(yè)領(lǐng)域的轉(zhuǎn)型成為業(yè)績(jī)提升的關(guān)鍵。對(duì)于零售行業(yè)從業(yè)者,這意味著思維方式的自我進(jìn)化,對(duì)于消費(fèi)者,則意味著與產(chǎn)品產(chǎn)生新的連接,享受更加個(gè)性化、更具人情味...

    mzlogin 評(píng)論0 收藏0
  • 行業(yè)log | 小程序搭載智慧零售,實(shí)現(xiàn)五位一體數(shù)字化營(yíng)銷

    摘要:零售商家通過微信支付小程序?qū)崿F(xiàn)線上線下消費(fèi)一體化,通過線上支付線下單品完成商品數(shù)據(jù)的打通。因此小程序搭載智慧零售,能助力商家實(shí)現(xiàn)消費(fèi)場(chǎng)景數(shù)字化以及購買行為具象化,從新的維度提高用戶服務(wù)水平。 隨著移動(dòng)互聯(lián)網(wǎng)、大數(shù)據(jù)、AI等技術(shù)日益成熟,實(shí)體行業(yè)領(lǐng)域的轉(zhuǎn)型成為業(yè)績(jī)提升的關(guān)鍵。對(duì)于零售行業(yè)從業(yè)者,這意味著思維方式的自我進(jìn)化,對(duì)于消費(fèi)者,則意味著與產(chǎn)品產(chǎn)生新的連接,享受更加個(gè)性化、更具人情味...

    mdluo 評(píng)論0 收藏0
  • 行業(yè)log | 小程序搭載智慧零售,實(shí)現(xiàn)五位一體數(shù)字化營(yíng)銷

    摘要:零售商家通過微信支付小程序?qū)崿F(xiàn)線上線下消費(fèi)一體化,通過線上支付線下單品完成商品數(shù)據(jù)的打通。因此小程序搭載智慧零售,能助力商家實(shí)現(xiàn)消費(fèi)場(chǎng)景數(shù)字化以及購買行為具象化,從新的維度提高用戶服務(wù)水平。 隨著移動(dòng)互聯(lián)網(wǎng)、大數(shù)據(jù)、AI等技術(shù)日益成熟,實(shí)體行業(yè)領(lǐng)域的轉(zhuǎn)型成為業(yè)績(jī)提升的關(guān)鍵。對(duì)于零售行業(yè)從業(yè)者,這意味著思維方式的自我進(jìn)化,對(duì)于消費(fèi)者,則意味著與產(chǎn)品產(chǎn)生新的連接,享受更加個(gè)性化、更具人情味...

    rottengeek 評(píng)論0 收藏0
  • Antmove 緣起 - 好用的小程序多端解決方案

    摘要:目前支持哪些平臺(tái)的搬家目前對(duì)外開放版本釋放了微信小程序轉(zhuǎn)支付寶小程序的功能,這也是我們?cè)谡{(diào)研中發(fā)現(xiàn)需求最多的。從筆者的了解來看,微信小程序框架原理更接近于,而支付寶小程序更接近于。 原文地址: https://ant-move.github.io/we... 螞蟻搬家工具(Antmove)是一個(gè)小程序開發(fā)輔助工具,致力于解決小程序跨平臺(tái)開發(fā)的難題,借助于 Antmove,你只需要編寫...

    crelaber 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<