[day5] Python发送Request接收Response与永丰API串接参数

Python实作 Request发送

如果你的Python环境没有requests模组

pip install requests

向网站/网路资源请求资料(request),主要有GET/POST两种方式,如果沟通正常,通常会获得回应response,除了资料外还会有一个http status code,关於网路HTTP具体技术细节这边不会讲解,有兴趣可以自行Google

个人建议会重复使用的常数都集中写在设定档案中,再用ConfigParser读取,这样可以统一修改整份专案的常数

[Server]
#永丰消费支付API服务网址
Api_URL = https://apisbx.sinopac.com/funBIZ/QPay.WebAPI/api/Order
#永丰消费支付API-Nonce服务网址
Nonce_URL = https://apisbx.sinopac.com/funBIZ/QPay.WebAPI/api/Nonce

API以Json格式沟通,建立一个基本的Json Headers

jsonheaders = {
    'Content-Type': 'application/json'
}

实作发送request

#读取设定档
env = ConfigParser()
env.read('env.ini')
cfg = SimpleNamespace(Api_URL = env['Server']['Api_URL'], Nonce_URL = env['Server']['Nonce_URL'])

#发送POST的request
def sendreq(method="POST", url = None, headers=jsonheaders, data = None):
  try:
    response = requests.request(method=method, url=url, headers=headers, data=data)
    return response
  except Exception as err:
    print(err)

产生JSON格式的Request实作

def GenRequest(cfg, APIService, sign, nonce, message):
  req = {'Version':cfg.Version, 'ShopNo':cfg.ShopNo, 'APIService':APIService, 'Sign':sign, 'Nonce': nonce, 'Message':message}
  #ensure_ascii=False,关闭中文ascii转换
  js_req = json.dumps(req, indent=4, ensure_ascii=False)
  return js_req

返回的Response中的参数定义可以参考w3schools,实际会使用到的只有statud_code与content

#判断是否Ok
response.OK
# TRUE/FALSE

#将content转成str
response.text

#将content转成json
response.json()

永丰API参数

  • 由永丰银行指定的参数
    • Version(API版本,现固定为1.0.0)
    • ShopNo
    • Nonce
  • 由店家自行产生
    • APIService(e.g. OrderCreate、OrderQuery、OrderPayQuery.....)
    • Sign(SHA256)
      • JSON
      • Nonce
      • HashID
    • Message(AES CBC)
      • JSON
      • HashID
      • IV

说明请见数位金流 API 技术规格文件p.13,以下为完成签章与内文加密的完整Request

{
  "Version": "1.0.0",
  "ShopNo": "NA0001_001",
  "APIService": "OrderCreate",
  "Sign": "7788EE61DD450944992641B3B2F8210B81A0AE97908BC19825F2A82C0F72EA43",
  "Nonce": "NjM2NjY5MDQ3OTQwMzIuMTphZmJjODBhOTM5NzQ1NjMyNDFhZTczMjVjYzg0Mjg5ZjQxYTk2MWI2ZjNkYTA0NDdmOTRhZjU3ZTIzOWJlNDgz",
  "Message": "4FE341D3A8C30C9A50573F3008F7B1CA8DD96FB2A4346D83936E5C4FDB21E87BA9E3D36A6635C6F5EBBD5438F3CA8FE97DEBB2ADBC82F92BF3C840B3128D8F00116536E7C936D7D587F6220C52C1367DF2BE9CBB16C6A7C6242AA8B38CD2E576328CF727E50FFA49B4F9FBE5DF10986C5299F9FC26E23E956AFDFB92B731FDA84ABEF1C89E0CD0A8CA8F7C23DC2D06E12A6F916EC47CDD9B4D4F87AC0B687EE1088A19F2C35C0FD8B0C97745B926FBAA48FEEDEB826C2C22743DB46781FF220ECA409FC150908540271E60184729C08C73275C54125C3F814FF33CA79A0E1B3902D446925FCC8235809FCBAB7E372D8C29E424CEFF0AD1CBD41E843714EB365158F2FC0B2E6FB48176D5CFF6B68F4BED4D7484C1A4723ABD059DA64A6703B30B0199B170FDF059899552FA1818ABA5B0D0E21014513985A738D59851EDF0B1CFB36A7B7B727109BE7789D284C75E5D694DFC9B7060DCBFD8C7915C95C4E0F29B"
}

最後一个Message参数怎麽看不懂,安啦明天将说明如何进行内文的ABS CBC加密


<<:  使用VS新增资料

>>:  Day17 - 铁人付外挂前置作业(二)- 开发环境

Day 19: Let's Koin!Koin 实作依赖注入

Keyword: Koin 到Day20 使用Koin管理依赖注入显示在Android上 放在这边 ...

react 大冒险-一些实用的 package-day 30

今天似乎是第 30 天,轻松一下~ 来介绍一些好用的 package (伪)结赛感言 总之晃的一下就...

R语言-视觉化-双y轴图 (two y axis in r.studio)

废话不多说,直接附上code 影片含有程序码详细解说,若有误再烦请告知,谢谢 library(ggp...

Day09 iPhone捷径-位置Part1

Hello 大家, 上三天就放假了~~ 但还是觉得好累= = 周休二日真的不够, 至少每周可以在家上...

Day13: HTTP服务器

哈罗~~大家好!!星期五好愉快~~马上进入主题吧!! 今天要介绍的是使用NodeJs建立後端的服务器...