国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程式 微信開發(fā) 微信公眾號開發(fā)之微信支付

微信公眾號開發(fā)之微信支付

Feb 22, 2017 pm 04:02 PM
微信公眾號

  前幾天因?yàn)楣緦0感枨?,要做一個(gè)用微信在線充值的功能,就是在微信的瀏覽器裡面點(diǎn)擊一個(gè)網(wǎng)頁調(diào)起微信支付,現(xiàn)在大致來說一下微信支付之公眾號支付的開發(fā)流程:

  首先你的公眾號必須是認(rèn)證服務(wù)號,要開通了微信支付的權(quán)限;在開發(fā)寫程式碼之前我們要把支付相關(guān)的一些資訊設(shè)定做好,以利於後續(xù)操作,開通之後微信那邊就會給你發(fā)一封郵件,裡麵包含了你公眾號商戶平臺的後臺登陸相關(guān)的一些信息,登陸商戶平臺之後在-> ;帳號設(shè)定->API安全裡面設(shè)定金鑰,這個(gè)在後面會用到;

微信公眾號開發(fā)之微信支付

帳號參數(shù)說明


#郵件中參數(shù) API參數(shù)名稱 #詳細(xì)說明
APPID appid #appid是微信公眾帳號或開放平臺APP的唯一標(biāo)識,在公眾平臺申請公眾帳號或在開放平臺申請APP帳號後,微信會自動分配對應(yīng)的appid,用於識別此應(yīng)用程式。商家的微信支付審核透過郵件中也會包含該欄位值。
微信支付商家號碼 mch_id #商家申請微信支付後,由微信支付分配的商家收款帳號。
API金鑰 key 交易過程產(chǎn)生簽署的金鑰,僅保留在商家系統(tǒng)和微信支付後臺,不會在網(wǎng)絡(luò)中傳播。商家妥善保管該Key,切勿在網(wǎng)路中傳輸,不能在其他客戶端中存儲,保證key不會被洩漏。商家可依郵件提示登入微信商家平臺進(jìn)行設(shè)定。
Appsecret secret AppSecret是APPID對應(yīng)的介面密碼,用於取得介面呼叫憑證access_token時(shí)使用。在微信支付中,先透過OAuth2.0介面取得使用者openid,此openid用於微信內(nèi)網(wǎng)頁支付模式下單一介面使用。在開發(fā)模式中取得AppSecret(成為開發(fā)者且?guī)ぬ枦]有異常狀態(tài))。


?

#  這些完成之後我們還要了解公眾號支付的一個(gè)業(yè)務(wù)流程:

微信公眾號開發(fā)之微信支付

?

?

商家系統(tǒng)與微信支付系統(tǒng)主要互動:

#?

商家系統(tǒng)與微信支付系統(tǒng)主要互動:




# 1.商家server呼叫統(tǒng)一下單介面請求訂單,api參考公用api【統(tǒng)一下單API】;在請求預(yù)付訂單之前我們要呼叫微信OAuth2.0網(wǎng)頁授權(quán)取得使用者微信OpenId,這裡就不詳細(xì)說明了,以下是預(yù)付下單的程式碼實(shí)作:

string timeStamp = TenPayUtil.GetTimestamp();
                string nonceStr = TenPayUtil.GetNoncestr();
                string paySign = string.Empty;

                //創(chuàng)建支付應(yīng)答對象
                var packageReqHandler = new RequestHandler(null);

                string spbill_create_ip = Request.UserHostAddress;

                //初始化
                //packageReqHandler.Init();
                //packageReqHandler.SetKey(TenPayInfo.Key);
                //設(shè)置package訂單參數(shù)
                packageReqHandler.SetParameter("appid", appID); //公眾賬號ID
                packageReqHandler.SetParameter("body", StrUtil.GetCutString(productName, 100)); //不能超過127個(gè)字符
                packageReqHandler.SetParameter("mch_id", mchid); //商戶號
                packageReqHandler.SetParameter("nonce_str", nonceStr.ToLower()); //隨機(jī)字符串
                packageReqHandler.SetParameter("notify_url", notifyUrl); //接收財(cái)付通通知的URL
                packageReqHandler.SetParameter("openid", openId); //openid
                packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家訂單號
                // packageReqHandler.SetParameter("attach", "");          //附加數(shù)據(jù)  未來可用于區(qū)分不同微信支付業(yè)務(wù)
                packageReqHandler.SetParameter("spbill_create_ip", spbill_create_ip); //用戶的公網(wǎng)ip,不是商戶服務(wù)器IP
                packageReqHandler.SetParameter("total_fee", (onlinePayMoney * 100).ToString("0")); //商品金額,以分為單位(money * 100).ToString()
                packageReqHandler.SetParameter("trade_type", "JSAPI"); //交易類型

                //獲取package包
                string sign = packageReqHandler.CreateMd5Sign("key", TenPayInfo.Key);
                packageReqHandler.SetParameter("sign", sign); //交易類型
                string data = packageReqHandler.ParseXML();
                LoggerHelper.Log(data);
                
                //調(diào)用統(tǒng)一下單接口請求訂單
                var result = TenPayV3Service.Unifiedorder(data);
                LoggerHelper.Log(result);

                var res = XDocument.Parse(result);

                string prepayId = string.Empty;
                if (res.Element("xml").Element("return_code").Value == "SUCCESS")
                {
                    prepayId = res.Element("xml").Element("prepay_id").Value;
                }

                string package = string.Format("prepay_id={0}", prepayId);
                timeStamp = TenPayUtil.GetTimestamp();

                //設(shè)置支付參數(shù)
                var paySignReqHandler = new RequestHandler(null);
                paySignReqHandler.SetParameter("appId", appID);
                paySignReqHandler.SetParameter("timeStamp", timeStamp);
                paySignReqHandler.SetParameter("nonceStr", nonceStr);
                paySignReqHandler.SetParameter("package", package);
                paySignReqHandler.SetParameter("signType", "MD5");
                paySign = paySignReqHandler.CreateMd5Sign("key", TenPayInfo.Key);

                //將信息傳遞給支付頁面
                ViewBag.appId = appID;
                ViewBag.timeStamp = timeStamp;
                ViewBag.nonceStr = nonceStr;
                ViewBag.package = package;
                ViewBag.paySign = paySign;


#############下面是頁面js相關(guān)程式碼:######### #######
<script type="text/javascript">        // 當(dāng)微信內(nèi)置瀏覽器完成內(nèi)部初始化后會觸發(fā)WeixinJSBridgeReady事件。
        document.addEventListener(&#39;WeixinJSBridgeReady&#39;, function onBridgeReady() {
            $(function () {                //公眾號支付
                jQuery(&#39;#getBrandWCPayRequest&#39;).click(function (e) {
                    WeixinJSBridge.invoke(&#39;getBrandWCPayRequest&#39;, {                        "appId": "@ViewBag.appId", //公眾號名稱
                        "timeStamp": "@ViewBag.timeStamp", //時(shí)間戳
                        "nonceStr": "@ViewBag.nonceStr", //隨機(jī)串
                        "package": "@Html.Raw(ViewBag.package.ToString())",//擴(kuò)展包
                        "signType": "MD5", //微信簽名方式
                        "paySign": "@ViewBag.paySign" //微信簽名                    }, function (res) {                        if (res.err_msg == "get_brand_wcpay_request:ok") {                            //alert("微信支付成功!");
                            window.location.href = "@WxPaySettingConfig.WmallURL/Wmall/TradePay/Success/@ViewBag.ShopId/?orderNo=@orderNoMark";
                        }                        else if (res.err_msg == "get_brand_wcpay_request:cancel") {                            //alert("用戶取消支付!");                        }                        else {
                            window.location.href = "/wxpay/jsapi/error/?isPayFail=1&csid=@ViewBag.ShopId&orderNo=@orderNoMark&biztype=1";    
                        }                        // 使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示:res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對可靠。                        //因此微信團(tuán)隊(duì)建議,當(dāng)收到ok返回時(shí),向商戶后臺詢問是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此時(shí)未收到通知,商戶后臺主動調(diào)用查詢訂單接口,查詢訂單的當(dāng)前狀態(tài),并反饋給前端展示相應(yīng)的界面。                    });
                });
            });            //WeixinJSBridge.log(&#39;yo~ ready.&#39;);
        }, false);    </script>
############?##########2.商家server接收付款通知,api請參閱公共api【###支付結(jié)果通知API# ##】######
[HttpPost]
        public void NoticeUrl()
        {
            string xmlString = HttpClientHelper.GetPostString(Request);  5 
            //此處應(yīng)記錄日志
            LoggerHelper.Log(string.Format("【微支付】異步通知參數(shù):{0}", xmlString));  8 
            var returnMsg = new ReturnMessage() { Return_Code = "SUCCESS", Return_Msg = string.Empty };
            //通知消息實(shí)體
            NotifyMessage message = null;
            //訂單處理相關(guān)的方法內(nèi)全局變量
            bool isNeedDeal = false; //標(biāo)識訂單是否需要處理
            string orderNo = string.Empty; //訂單編號 (需要根據(jù)商家數(shù)據(jù)包字段判斷所屬訂單)
            CorpSalesOrder saleOrder = null;
            try
            {
                message = HttpClientHelper.XmlDeserialize<NotifyMessage>(xmlString);
 
                //訂單號 獲得
                orderNo = message.Out_Trade_No;
                if (string.IsNullOrEmpty(orderNo))
                {
                    throw new InvalidOperationException("未找到該訂單信息.");
                } 45                 var doc = new XmlDocument();
                doc.LoadXml(xmlString);
                var dic = new Dictionary<string, string>();
                string sign = string.Empty;
                foreach (XmlNode node in doc.FirstChild.ChildNodes)
                {
                    if (node.Name.ToLower() != "sign")
                        dic.Add(node.Name, node.InnerText);
                    else
                        sign = node.InnerText;
                }
                UnifiedWxPayModel model = UnifiedWxPayModel.CreateUnifiedModel(xddAppId, xddMchid, xddWxkey);
                if (model.ValidateMD5Signature(dic, sign))
                {
                    //處理通知 業(yè)務(wù)邏輯:
                    if (message.Return_Code == "SUCCESS")
                    {
                        if (message.Result_Code == "SUCCESS")
                        {
                   //此處處理支付成功后的業(yè)務(wù)邏輯
                        }
                        else
                        {
                            throw new InvalidOperationException(string.Format("{0}:{1}", message.Err_Code, message.Err_Code_Des));
                        }
                    }
                    else
                    {
                        throw new InvalidOperationException(message.Return_Msg);
                    }
                }
            }
            catch (InvalidOperationException e)
            {
                //此處記錄異常日志
                returnMsg.Return_Code = "FAIL";
                returnMsg.Return_Msg = e.Message;
                LoggerHelper.Log("【微信支付異步通知】出錯(cuò),訂單編號:" + orderNo + ",錯(cuò)誤原因:" + e.Message);
            }
            catch (Exception e)
            {
                //此處記錄異常日志
                returnMsg.Return_Code = "FAIL";
                returnMsg.Return_Msg = e.Message;
                LoggerHelper.Log("【微信支付異步通知】出錯(cuò),訂單編號:" + orderNo + ",錯(cuò)誤原因:" + (e.InnerException == null ? e.Message : e.InnerException.ToString()));
            }
            Response.Write(returnMsg.ToXmlString());
            Response.End();
        }
###更多微信公眾號開發(fā)之微信支付?相關(guān)文章請關(guān)注PHP中文網(wǎng)! ################
本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Scrapy實(shí)現(xiàn)微信公眾號文章爬取與分析 Scrapy實(shí)現(xiàn)微信公眾號文章爬取與分析 Jun 22, 2023 am 09:41 AM

Scrapy實(shí)現(xiàn)微信公眾號文章爬取和分析微信是近年來備受歡迎的社群媒體應(yīng)用,在其中運(yùn)作的公眾號也扮演著非常重要的角色。眾所周知,微信公眾號是一個(gè)資訊和知識的海洋,因?yàn)槠渲忻總€(gè)公眾號都可以發(fā)布文章、圖文訊息等資訊。這些資訊可以被廣泛地應(yīng)用在許多領(lǐng)域中,例如媒體報(bào)道、學(xué)術(shù)研究等。那麼,本篇文章將介紹如何使用Scrapy框架來實(shí)現(xiàn)微信公眾號文章的爬取與分析。 Scr

微信公眾號認(rèn)證和不認(rèn)證有哪些差別 微信公眾號認(rèn)證和不認(rèn)證有哪些差別 Sep 19, 2023 pm 02:15 PM

微信公眾號認(rèn)證和不認(rèn)證的差異在認(rèn)證識別、功能權(quán)限、推播頻率、介面權(quán)限和使用者信任度等方面。詳細(xì)介紹:1、認(rèn)證標(biāo)識,認(rèn)證公眾號會獲得官方頒發(fā)的認(rèn)證標(biāo)識,即藍(lán)色V標(biāo)誌,這個(gè)標(biāo)誌可以增加公眾號的可信度和權(quán)威性,讓用戶更容易辨別真實(shí)的官方公眾號; 2、功能權(quán)限,認(rèn)證公眾號相比未認(rèn)證的公眾號擁有更多的功能和權(quán)限,例如認(rèn)證公眾號可以申請開通微信支付功能,實(shí)現(xiàn)在線支付和商業(yè)化運(yùn)營等等。

Python中的爬蟲實(shí)戰(zhàn):微信公眾號爬蟲 Python中的爬蟲實(shí)戰(zhàn):微信公眾號爬蟲 Jun 10, 2023 am 09:01 AM

Python是一種優(yōu)雅的程式語言,具有強(qiáng)大的資料處理和網(wǎng)路爬蟲功能。在這個(gè)數(shù)位時(shí)代,網(wǎng)路上充滿了大量的數(shù)據(jù),爬蟲已成為獲取數(shù)據(jù)的重要手段,因此,Python爬蟲在數(shù)據(jù)分析和挖掘方面有著廣泛的應(yīng)用。在本文中,我們將介紹如何使用Python爬蟲來取得微信公眾號文章資訊。微信公眾號是一種流行的社交媒體平臺,用於線上發(fā)布文章,是許多公司和自媒體推廣和行銷的重要工

用PHP建構(gòu)一個(gè)微信公眾號API介面 用PHP建構(gòu)一個(gè)微信公眾號API介面 May 13, 2023 pm 12:01 PM

在當(dāng)今網(wǎng)路時(shí)代,微信公眾號成為了越來越多企業(yè)的重要行銷管道。想要自己的微信公眾號實(shí)現(xiàn)更多的功能,常常需要寫對應(yīng)的介面。本文將以PHP語言為例,介紹如何建構(gòu)一個(gè)微信公眾號API介面。一、前置準(zhǔn)備在編寫微信公眾號API介面之前,需要開發(fā)者擁有一個(gè)微信公眾號的帳號,並且在微信公眾平臺中申請開發(fā)者介面權(quán)限。申請成功後,可以取得相關(guān)的開發(fā)者AppID和AppSe

如何使用Laravel開發(fā)一個(gè)基於微信公眾號的線上點(diǎn)餐系統(tǒng) 如何使用Laravel開發(fā)一個(gè)基於微信公眾號的線上點(diǎn)餐系統(tǒng) Nov 02, 2023 am 09:42 AM

如何使用Laravel開發(fā)一個(gè)基於微信公眾號的線上點(diǎn)餐系統(tǒng)隨著微信公眾號的廣泛應(yīng)用,越來越多的企業(yè)開始將其作為線上行銷的重要管道。在餐飲業(yè)中,開發(fā)一個(gè)基於微信公眾號的線上點(diǎn)餐系統(tǒng)能夠提高企業(yè)的效率和銷售額。本文將介紹如何使用Laravel框架來開發(fā)一個(gè)這樣的系統(tǒng),並提供具體的程式碼範(fàn)例。專案準(zhǔn)備首先,需要確保已經(jīng)在本地環(huán)境中安裝了Laravel框架??梢酝?/p>

公眾號每天只能發(fā)一篇文章嗎 公眾號每天只能發(fā)一篇文章嗎 Jun 16, 2023 pm 02:04 PM

公眾號每天不是只能發(fā)一篇文章,每次最多可以發(fā)表八篇文章,多篇文章的發(fā)布方法:1、點(diǎn)擊左側(cè)的“素材管理”,再點(diǎn)擊“新建圖文素材”開始編輯第一篇文章;2、編輯完第一篇文章之後,點(diǎn)選左側(cè)第一篇文章下面的+號,點(diǎn)選「圖文訊息」即可編輯第二篇文章;3、做完多圖文後,點(diǎn)選「保管並群發(fā)」即可完成多篇文章的發(fā)布。

使用Go語言框架建構(gòu)微信公眾號應(yīng)用 使用Go語言框架建構(gòu)微信公眾號應(yīng)用 Jun 04, 2023 am 10:40 AM

隨著網(wǎng)路的普及和行動裝置的廣泛使用,微信公眾號已經(jīng)成為了企業(yè)行銷不可或缺的一部分。透過微信公眾號,企業(yè)可以實(shí)現(xiàn)輕鬆地與用戶互動,推廣產(chǎn)品和服務(wù),提高品牌知名度。為了更好地開發(fā)微信公眾號應(yīng)用,越來越多的開發(fā)者和企業(yè)選擇使用Go語言來建立微信公眾號應(yīng)用程式。 Go語言是一種由Google開發(fā)的程式語言,它的語法簡潔,適合建立高效能、高並發(fā)的即時(shí)應(yīng)用程式。在簡單易用和

微信宣布規(guī)範(fàn)「封建迷信風(fēng)氣,借宗教、風(fēng)水、運(yùn)勢等噱頭斂財(cái)或博取關(guān)注」內(nèi)容 微信宣布規(guī)範(fàn)「封建迷信風(fēng)氣,借宗教、風(fēng)水、運(yùn)勢等噱頭斂財(cái)或博取關(guān)注」內(nèi)容 Aug 05, 2024 pm 10:26 PM

本站8月1日消息,微信公眾平臺營運(yùn)中心今日發(fā)文稱,平臺發(fā)現(xiàn)部分業(yè)者發(fā)布的文章中存在封建迷信風(fēng)氣,借宗教、風(fēng)水、運(yùn)勢等噱頭斂財(cái)或博取關(guān)注,此類內(nèi)容極有可能對使用者造成誤導(dǎo)或財(cái)產(chǎn)損失。微信方面將採取持續(xù)巡查,一旦發(fā)現(xiàn)違規(guī)內(nèi)容將根據(jù)具體違規(guī)程度作出相應(yīng)處理。本站附違規(guī)案例如下:發(fā)布迷信類相關(guān)標(biāo)題,使用恐嚇、誘導(dǎo)等語氣誇大某行為的危害或負(fù)面影響。 ▲圖源微信公眾平臺營運(yùn)中心,下同文章提供算命、看相、占卜等帶封建迷信色彩服務(wù),並含付費(fèi)項(xiàng)目,如販賣轉(zhuǎn)運(yùn)消災(zāi)商品等。借提供相關(guān)服務(wù)的名義不正當(dāng)?shù)貟窦脩魝€(gè)人隱私信

See all articles