`
喵喵大神
  • 浏览: 37369 次
文章分类
社区版块
存档分类
最新评论

调用第三方服务API的SDK编写思路

 
阅读更多

思路

  1. 通过将SDK方法中返回的数据划分为正常返回数据以及错误返回的数据两部分,让调用者更简单的对接口调用错误进行处理。
  2. 将SDK调用第三方服务接口的流程划分为: 数据准备,http请求,结果处理三部分,以重用代码。

例子

以聚合数据手机话费充值SDK编写为例, 手机话费充值API

# encoding=utf-8
from urlparse import urljoin
from hashlib import md5
from datetime import datetime
from random import sample
import requests
import pytz


class APIError(object):
    def __init__(self, code, msg):
        self.code = code
        self.message = msg


class JuhePhoneChargeApi(object):

    API_PREFIX = 'https://op.juhe.cn/ofpay/mobile/'
    def __init__(self, openid, key, api_entry=None):
        self._key = key
        self._openid = openid
        self._api_entry = api_entry or self.API_PREFIX


    def telcheck(self, phoneno, cardnum):
        params = {'phoneno': phoneno, 'cardnum': cardnum}
        return self._get(path='telcheck', params=params)

    def telquery(self, phoneno, cardnum):
        params = {
            'phoneno': phoneno,
            'cardnum': cardnum,
        }
        return self._get(path='telquery', params=params)

    def onlineorder(self, phoneno, cardnum, orderid):
        params = {
            'phoneno': phoneno,
            'cardnum': cardnum,
            'orderid': orderid or self.create_orderid(),
        }
        params.update({'sign': self._create_sign(**params)})

        return self._get(path='onlineorder', params=params)

    def ordersta(self, orderid):
        params = {'orderid': orderid}
        return self._get(path='orderid', params=params)

    def create_orderid(self):
        return ''.join((
            datetime.now(tz=pytz.timezone('Asia/Shanghai')).strftime('%Y%m%d%H%M%S%f'),
            self._create_code(12)))

    def _process_response(self, rsp):
        """
        对第三方接口返回数据做同一处理,
        :param rsp:
        :return:  接口正常返回值, 错误对象
        """
        if rsp.status_code != 200:
            return None, APIError(rsp.status_code, 'http error')
        try:
            content = rsp.json()
        except:
            return None, APIError(99999, 'invalid rsp')
        if 'error_code' in content and content['error_code'] != 0:
            return None, APIError(content['error_code'], content['reason'])

        return content['result'], None


    def _get(self, path, params=None):
        if not params:
            params = {}

        headers = {'Content-type': 'application/json'}
        params.update({'key': self._key})

        rsp = requests.get(urljoin(self._api_entry, path), params=params, headers=headers)
        return self._process_response(rsp)


    def _create_sign(self, phoneno, cardnum, orderid=None):
        obj_str = ''.join((
            self._openid, 
            self._key, 
            phoneno, 
            str(cardnum), 
            orderid or self.create_orderid()))

        m = md5()
        m.update(obj_str)
        return m.hexdigest()

    def _create_code(self, number_len):
        ELEMENT = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
        return ''.join(sample(ELEMENT, number_len))

 



文/Ljian1992(简书作者)
原文链接:http://www.jianshu.com/p/08f783dea4d9
分享到:
评论

相关推荐

    Mob第三方短信验证SDK

    Mob第三方短信验证SDK是一款专为开发者设计的便捷工具,它简化了移动应用中的用户身份验证过程,通过集成SDK,开发者可以快速实现短信验证码功能,提高应用的安全性和用户体验。这款SDK适用于Android Studio和...

    JNI调用第三方dll实例

    在本实例中,我们将深入探讨如何使用JNI调用第三方DLL(动态链接库)文件,这是在Java应用程序中利用C++或C代码能力的常见场景。这个实例是在Visual Studio 2010环境下构建的,但请注意,其他环境可能需要不同的配置...

    unity3d ios平台,接入第三方sdk

    1. **获取SDK**:从第三方服务商的开发者网站下载SDK及相关文档。例如,如果你打算接入AdMob进行广告展示,那么你需要从Google AdMob的开发者中心获取iOS SDK。 2. **创建C#脚本**:在Unity项目中,创建C#脚本(如...

    uniapp对接android的sdk开发包教程。

    5. **编写JavaScript接口**:uniapp通过H5桥接原生代码,所以你需要创建一个JavaScript接口来调用Android SDK的方法。在uniapp的`plugin`目录下创建一个新的插件,定义对应的API。这些API将会被JavaScript层调用,并...

    第三方支付-融托付的集成SDK和Demo

    "融托付"就是这样的一个第三方支付服务,它不仅提供了与微信、支付宝类似的在线支付功能,还独具特色地支持使用融托付刷卡器进行线下刷卡交易。这个集成SDK和Demo的资源包,对于开发者来说,是实现融托付支付功能的...

    Delphi调用iOS三方SDK教程&微信接口示例&工具

    2. **导入SDK**:将第三方SDK的静态库或动态库文件添加到Delphi项目中。这通常需要将库文件放入适当目录,然后在Delphi的项目选项中配置链接器路径。 3. **创建桥接头文件**:由于Delphi使用Objective-C的桥接技术...

    SocialSDKAndroid第三方社会化sdk的集成和二次封装

    在Android应用开发中,集成第三方Social SDK是为了充分利用社交媒体平台的功能,如用户登录、内容分享、评论、关注等,为用户提供便利并增强应用的互动性。本文将深入探讨如何集成和二次封装这些SDK,以实现更高效、...

    VC MFC调用百度地图API

    而调用百度地图API,可以让我们的应用与百度地图服务进行交互,实现如定位、地图显示、路线规划等功能。本篇文章将深入探讨如何在MFC项目中集成并使用百度地图API。 首先,了解百度地图API的基本概念是至关重要的。...

    CWShare第三方登录SDK

    CWShare第三方登录SDK是一款专为iOS开发者设计的集成工具,旨在简化应用中接入国内主流社交平台的登录和分享功能。这个SDK是用Objective-C编写的,使得具备Objective-C背景的开发者能够更方便地在其应用程序中整合...

    拼多多APISDK拼多多开放平台

    总结来说,拼多多APISDK为PHP开发者提供了便捷的工具,帮助他们与拼多多开放平台进行数据交互,实现各种业务功能。通过学习和使用这套SDK,开发者可以快速地将拼多多的功能集成到自己的应用程序中,提升开发效率和...

    APP7天快速开发教程6:第三方服务模块的使用方式

    - **编写代码**:在项目中编写代码调用第三方服务的API接口。 ##### 1.2 目前已经集成的第三方服务模块 - **推送服务**:如极光推送、阿里云推送等。 - **地图服务**:例如百度地图、高德地图等。 - **社交分享**...

    windows sdk api写的ide

    9. **插件架构**:允许扩展IDE的功能,可以通过加载第三方插件来添加新的特性或支持其他编程语言。 在实现这些组件时,开发者需要熟练掌握Windows API,理解各种消息机制、线程管理和内存管理。此外,为了提高效率...

    Python调用公有云api操作手册.docx

    这两个凭据是API调用时用于身份验证的关键信息,相当于用户的登录密码,因此非常重要且不应泄露给第三方。 1. **获取方式**:登录腾讯云控制台,在API密钥管理页面中可以获取这些安全凭证。 2. **注意事项**:务必...

    xenserver 6.5 SDK_zh-cn 中文 API

    XenServer 提供了一个基于 ...语言绑定将各 API 调用显示为目标语言中的第一类函数,可以大大简化第三方应用程序开发工作。 XenServer SDK 可为 C、C#、Java、Python 和 PowerShell 编程语言提供语言绑定和示例代码。

    jar包被第三方调用Demo.zip

    "jar包被第三方调用Demo.zip"是一个示例,它演示了如何将一个Java类库(通常以.jar格式)打包并提供给第三方开发者作为SDK使用。这个过程涉及到多个关键知识点,包括jar包的创建、API设计、文档编写以及调试和测试。...

    运用python时间海康SDK调用HkSDK.zip

    SDK通常包含了C++和.NET等接口,但通过Python,我们可以构建跨平台的应用程序,因为它有丰富的第三方库可以实现对C/C++库的绑定。 首先,要使用Python调用海康SDK,我们需要安装必要的库。这可能包括`ctypes`,它是...

    IOS第三方登录

    2. **SDK集成**:学习如何下载并导入第三方SDK,了解其API接口和使用方法。 3. **AppID和Secret key**:获取每个社交平台的开发者账号,并从中获取AppID和Secret key,用于标识你的应用和验证请求。 4. **权限请求...

    第三方登录

    10. **更新维护**:第三方登录平台的API和策略可能会有变动,因此需要定期关注官方更新,及时调整你的代码以保持兼容性。 以上就是在Android应用中实现第三方登录所涉及的主要技术和知识点。通过这个过程,开发者...

    api_key.rar_SDK_api key

    例如,当你在开发一款需要使用第三方服务(如地图、支付、社交媒体分享等)的应用时,你需要向该服务提供商申请一个API密钥。这个密钥就像是你的应用程序的“护照”,证明了你的应用有权使用这些服务。 SDK则提供了...

Global site tag (gtag.js) - Google Analytics