成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

跳出ping++退款的坑

FWHeart / 3005人閱讀

摘要:近期在項(xiàng)目的開發(fā)過程中需要用到的退款功能由于使用的版本比官方提供的要低個(gè)小版本因此問題并不是很大。然后我們通過得類的方法獲取給定然后再根據(jù)其屬性得方法傳入關(guān)鍵字參數(shù)來實(shí)現(xiàn)退款的操作。需要提示的是參數(shù)只能是最大個(gè)字符不然又會(huì)出現(xiàn)一些問題。

近期在項(xiàng)目的開發(fā)過程中,需要用到ping++的退款功能,由于使用的版本比官方提供的要低2個(gè)小版本,因此問題并不是很大。但是由于官方文檔有些內(nèi)容寫的比較含蓄,因此遇到了一些問題。
我們可以通過如下的方式來獲取SDK的版本:

>>> import pingpp
>>> pingpp.VERSION
"2.0.7"
>>> pingpp.api_version
"2.0.7"

在官方文檔得說明中,我們可以看到這樣3句代碼:

import pingpp
pingpp.api_key = "sk_test_ibbTe5jLGCi5rzfH4OqPW9KC"
ch = pingpp.Charge.retrieve("CH-ID")
re = ch.refunds.create(description="desc", amount=1)
入坑

在這里,我們看到我們先導(dǎo)入pingpp庫,然后通過賦值的方式將其傳入。然后我們通過pingpp得Charge類的retrieve方法獲取給定ch_id,然后再根據(jù)其refunds屬性得create方法傳入關(guān)鍵字參數(shù)來實(shí)現(xiàn)退款的操作。
如果我們沒有傳入api_key,將得到1個(gè)AuthenticationError權(quán)限錯(cuò)誤:

AuthenticationError: No API key provided. (HINT: set your API key using "pingpp.api_key = "). You can generate
 API keys from the Ping++ web interface.  See https://pingxx.com for details, or email [email protected] if you have a
ny questions.

在這里,我按照官方提供的方式進(jìn)行賦值,直接就出現(xiàn)上面的情況了,讓人比較納悶。

出坑

下面我們來看下其實(shí)現(xiàn)的源碼,在resource模塊下的Charge類繼承自3個(gè)類,分別為CreateableAPIResource, ListableAPIResource,UpdateableAPIResource。其源碼如下:

class Charge(CreateableAPIResource, ListableAPIResource,
             UpdateableAPIResource):
    def refund(self, **params):
        ...

而這3個(gè)父類繼承自APIResource類,而APIResource類繼承自PingppObject類,它是1個(gè)Pingpp對象。

class CreateableAPIResource(APIResource):
    @classmethod
    def create(cls, api_key=None, **params):
        requestor = api_requestor.APIRequestor(api_key)
        url = cls.class_url()
        response, api_key = requestor.request("post", url, params)
        return convert_to_pingpp_object(response, api_key)

class APIResource(PingppObject):
    @classmethod
    def retrieve(cls, id, api_key=None, **params):
        instance = cls(id, api_key, **params)
        instance.refresh()
        return instance

    def refresh(self):
        self.refresh_from(self.request("get", self.instance_url()))
        return self
    @classmethod
    def class_name(cls):
        ...
        return str(urllib.quote_plus(cls.__name__.lower()))

    @classmethod
    def class_url(cls):
        cls_name = cls.class_name()
        return "/v1/%ss" % (cls_name,)

    def instance_url(self):
        ...
        extn = urllib.quote_plus(id)
        return "%s/%s" % (base, extn)

從上述代碼,我們可以發(fā)現(xiàn),我們還可以直接將api_key以關(guān)鍵字參數(shù)的形式傳入到retrieve方法中。
我們調(diào)用Charge類的retrieve方法時(shí),其會(huì)生成1個(gè)實(shí)例,然后調(diào)用該實(shí)例得refresh方法。而后調(diào)研該實(shí)例的refresh_from方法,使用get請求,而地址為該實(shí)例的url。
因此,最終的url地址為https://api.pingxx.com/v1/charges/,首先class_name方法返回Charge類名的小寫名稱,而后在class_url方法中進(jìn)行組裝后返回給instance_url方法。
而在調(diào)用request方法的過程中,我們會(huì)涉及到1個(gè)convert_to_pingpp_object方法,其將響應(yīng)的內(nèi)容轉(zhuǎn)換為pingpp對象。
通過這種方式我們完成了官方文檔中查詢Charge對象的操作,即進(jìn)行如下的操作:

GET https://api.pingxx.com/v1/charges/{CHARGE_ID}

因此,上面ch最終的結(jié)果為我們使用API調(diào)用后得到的JSON數(shù)據(jù)結(jié)果,而后我們通過ch的refunds屬性得到這樣1個(gè)對象:

 ...
   "refunds": {
    "url": "/v1/charges/ch_xxx/refunds", 
    "has_more": false,
    "object": "list",
    "data": [
      {
        ...
      }
    ]
  }

而這個(gè)轉(zhuǎn)換的過程是在refresh_from函數(shù)中進(jìn)行的:

def refresh_from(self, values, api_key=None, partial=False):
        ...
        for k, v in values.iteritems():
            super(PingppObject, self).__setitem__(
                k, convert_to_pingpp_object(v, api_key))

而后我們通過object屬性獲取到ch.refunds的結(jié)果為list。通過如下的方式我們得到的ch.refunds為1個(gè)ListObject:

def convert_to_pingpp_object(resp,api_key):
    klass_name = resp.get("object")
    if isinstance(klass_name, basestring):
       klass = types.get(klass_name, PingppObject)

這樣,我們在create方法中傳入的參數(shù)與API文檔中創(chuàng)建Refund對象的參數(shù)一一對應(yīng)了。而這些傳入的參數(shù)將在調(diào)用api_requestor模塊中得APIRequestor類時(shí)傳入。其中,url為refund對象中的url屬性,即上面的/v1/charges/ch_xxx/refunds。
因此,第3行中的關(guān)鍵字參數(shù)description和amount正好對應(yīng)官方文檔中的說明。需要提示的是,description參數(shù)只能是最大255個(gè)unicode字符,不然又會(huì)出現(xiàn)一些問題。

總結(jié)

其實(shí)ping++的SDK是與其API接口對應(yīng)的,如果你在使用SDK的過程中對其傳入的參數(shù)不明確,可以查看API文檔相應(yīng)篇章中的說明。不然你會(huì)遇到ping++平臺(tái)給你返回一些讓你摸不著頭腦的回復(fù)。

原文:

http://yuki-onna.github.io/jump-out-of-the-refund-of-ping++/

參考文章:

https://www.pingxx.com/api#api-r-new
https://www.pingxx.com/guidance/server/charge/refund
https://github.com/PingPlusPlus/pingpp-python/blob/2.0.7/example/refund.py

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/37877.html

相關(guān)文章

  • 跳出ping++開發(fā)中API請求異常問題

    摘要:近期在做微信支付那方面的工作由于要在之前開發(fā)人員的基礎(chǔ)上進(jìn)行開發(fā)其中使用到了這個(gè)第方支付的。下面梳理下正常開發(fā)的流程請點(diǎn)擊下面的鏈接付款。結(jié)果總是提示必須是組鍵值對。主要是官方?jīng)]有提供明確的請求頭信息給我們導(dǎo)致我們一直在兜圈。 近期在做微信支付那方面的工作,由于要在之前開發(fā)人員的基礎(chǔ)上進(jìn)行開發(fā),其中使用到了ping++這個(gè)第3方支付的SDK。不得不說,ping++的SDK做的挺簡單的,...

    anonymoussf 評論0 收藏0
  • 跳出ping++開發(fā)中API請求異常問題

    摘要:近期在做微信支付那方面的工作由于要在之前開發(fā)人員的基礎(chǔ)上進(jìn)行開發(fā)其中使用到了這個(gè)第方支付的。下面梳理下正常開發(fā)的流程請點(diǎn)擊下面的鏈接付款。結(jié)果總是提示必須是組鍵值對。主要是官方?jīng)]有提供明確的請求頭信息給我們導(dǎo)致我們一直在兜圈。 近期在做微信支付那方面的工作,由于要在之前開發(fā)人員的基礎(chǔ)上進(jìn)行開發(fā),其中使用到了ping++這個(gè)第3方支付的SDK。不得不說,ping++的SDK做的挺簡單的,...

    Lin_R 評論0 收藏0
  • 老周互聯(lián):香港荃灣葵涌CN2精品線路 網(wǎng)站免實(shí)名購買、支持24小時(shí)無理由退款香港原生IP

    摘要:老周互聯(lián)怎么樣,老周互聯(lián)好不好,老周互聯(lián)隸屬于老周網(wǎng)絡(luò)科技部旗下,創(chuàng)立于年月份,是一家具有代表性的國人商家。目前主營的產(chǎn)品有云服務(wù)器,標(biāo)簽裸金屬服務(wù)器下的日志裸金屬服務(wù)器。人工客服測試標(biāo)簽下的日志香港測試 老周互聯(lián)怎么樣,老周互聯(lián)好不好,老周互聯(lián)隸屬于老周網(wǎng)絡(luò)科技部旗下,創(chuàng)立于2019年12月份,是一家具有代表性的國人商家。目前主營的產(chǎn)品有云服務(wù)器,裸金屬服務(wù)器。創(chuàng)辦一年多以...

    番茄西紅柿 評論0 收藏2637
  • CloudIPLC:539元/月/1GB內(nèi)存/20GB空間/2TB流量/100Mbps端口/獨(dú)立IP

    摘要:怎么樣,好不好,,國人穩(wěn)定商家,提供洛杉磯香港俄羅斯伯力泉州等?,F(xiàn)在泉州有折優(yōu)惠,標(biāo)簽獨(dú)立下的日志獨(dú)立,國內(nèi)直連等國際鏈路,有需要的可以關(guān)注一下。CloudIPLC怎么樣,CloudIPLC好不好,CloudIPLC,國人穩(wěn)定商家,提供洛杉磯KVM VPS、香港CMI KVM VPS、俄羅斯伯力KVM VPS、泉州CN2 KVM VPS等?,F(xiàn)在泉州CN2 VDS有77折優(yōu)惠,獨(dú)立IP,國內(nèi)A...

    atinosun 評論0 收藏0

發(fā)表評論

0條評論

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