Day12 - [丰收款] 为BackendURL中收到PayToken铺路,Django来了。

昨天遇到的找不到情境被触发ReturnURL,由於测试环境Message中解开的两个网址:WebAtmURL以及OtpUrl连过去一个会出现错误讯息,一个连结不到。

经由写信询问永丰技术处的窗口後,及时得到一个完整的回覆也厘清心中的疑惑 (不然就要断更了!!),给永丰数金处数位支付部门一个
/images/emoticon/emoticon12.gif

我直接整理我的问题以及回覆後的摘要结果如下:

  • WebAtmURL以及OtpUrl於测试环境中无法使用,仅会作10分钟内模拟顾客取得虚拟帐号後付款完成(或不付)
    • 因此,昨天出现网页无法使用,是预期内正常的。
  • ReturnURL会被触发的时机仅:
    1. 信用卡即时交易成功/失败通知
    2. 虚拟帐号方式,透过WebAtmURLOtpUrl转帐 (但如同前面所述,测试环境未开放,因此无法这样测)
  • 因此,在虚拟帐号的方试下,只能使用BackendURL来取得PayToken值! (虽然BackendURL是虚拟帐号的非必填值)

所以意思就是,若没有架一个网站让永丰API呼叫BackendURL的方式,我们使用虚拟帐号模拟付款是拿不到PayToken的。因此我们得提前进行Django的Python Web开发了。

Django初登场

上一次使用Python + Django开发Web已经是去年的时候,因有幸参加了【台湾人工智慧学校 / 技术领袖班】AI课程时,期末专题开发时所使用,不然过去近10年主要工作上是用ASP.NET (含MVC)开发,更早期一点是使用JSP以及PHP(十多年前了)。使用Python开发网站的经验倒是觉得很新鲜。

准备环境

我预计使用PyCharm Community Edition版本来进行Django的开发实作,因此先安装一下PyCharm,由於Community版有许多与Django的专案功能没有像Professional版可以直接在UI中整合进去,因此仍然会需要搭配一些console指令来完成。

我们後续会围绕着一个虚构的电商平台「库米狗屋.KummyShop」来建置,因此先行开设一个空的Python专案 (建立一个新的虚拟环境venv)。透过PyCharm下方的Terminal先使用pip安装django。

库米Kummy,是我家的毛孩,一只帅气又可爱的长毛腊肠!电商平台让他有买不完的饲料和狗骨头吧!

pip install django

https://ithelp.ithome.com.tw/upload/images/20210927/20130354Zq6uAvebqJ.png

建立django专案

接下来,我们则可以使用刚刚安装好的django套件中的django-admin指令来新增django专案。在KummyShop Python专案的根目录下,输入以下指令:

> django-admin startproject mysite

使用特别的参数startproject後面加上你喜欢的专案名称。再看一下Pycharm的Project Tree,会看到多出了相关的目录结构。

https://ithelp.ithome.com.tw/upload/images/20210927/20130354fNuzR1B2uH.png

其实这样就已经把最基础的Django网站建立起来了,接下来我们就可以使用Django内建的开发模式Web服务器将网站结果跑起来。

设定Runserver启动组态

点选在PyCharm的右上方Add Configuration...的按钮後,新增一个新的Python Run/Debug的组态设定。

https://ithelp.ithome.com.tw/upload/images/20210927/20130354HjftFMz3Tl.png

刚刚在使用startproject後,会於mysite底下有一个重要的manage.py档案,需要将之完整路径设定於Script Path中。而在Parameters参数输入特定用法runserver,这样就把这个Django的启动组态设定完成。

https://ithelp.ithome.com.tw/upload/images/20210927/20130354X1oHa0SgKg.png

完成後即会产生"Run"或"Debug"的按钮来启动Django Dev Server。点选後就会在Terminal看到Django的开发网站被启动了,连结到Terminal讯息显示的预设网址http://127.0.0.1:8000/,即可确认一下我们的Django网站是否成功

https://ithelp.ithome.com.tw/upload/images/20210927/2013035426xWRTHaW2.png

发射!网站启动

如果可以看到下面这个画面,就表示我们成功把网站建立好,也可以正常运行!
https://ithelp.ithome.com.tw/upload/images/20210927/201303549e5jPClNXN.png

建立一个简单的页面

看到预设页面应该还感到太不踏实,至少要看到一页是我们自己准备的页面,才会有一点点安心感,接着我们就要继续使用django-admin指令来建立新的功能页面,不过要先说明一下,一个新的功能页面在Django会称之为App

我们要先进入mysite目录後,再使用建App的指令。

> cd mysite
> django-admin startapp greetings

看一下专案目录,会多出greetings的新目录。

https://ithelp.ithome.com.tw/upload/images/20210927/201303543TaTAwmJ77.png

我们在其中的greetings\view.py中,加入一段index的内容,顺便测试中文输出。

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. 欢迎来到 【库米狗屋 ● Kummy Shop】")

接着我们在greetings目录下建立一个新的档案,名为urls.py,里面输入这些内容,将刚刚的index绑定到greetings URL底下不用输入任何名称的预设页面。

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

上面是将greetings这个App相对应的view内容准备好,以及urls的对应设定好。
接着是要在整个Django的Root底下(也就是mysite)设定这个新增的App的URL对应。

我们修改mysite\urls.py,原本有预设引入urls下的path,但少了include,需自行补上。
再把刚刚的greetings以及他的greetings.urls给指定进去。

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('greetings/', include('greetings.urls')),
    path('admin/', admin.site.urls),
]

将网址连到刚刚的http://127.0.0.1:8000/greetings/,果然看到刚刚准备好的greetings的内容显示在上面了!

https://ithelp.ithome.com.tw/upload/images/20210927/20130354ssT7ZSwOoV.png

这下是否感到心里踏实了呢!
/images/emoticon/emoticon34.gif

加一个URL参数取值

不过因为後面要使用BackendURL来取得PayToken,所以我们先再加测一个URL的GET取参数值。就直接使用刚刚的greetings吧,我们多加上一个从网址列取得your_name参数,并显示在页面上吧!

from django.http import HttpResponse


def index(request):
    your_name = request.GET.get("your_name", "Noname")
    return HttpResponse("Hello, {}. 欢迎来到 【库米狗屋 ● Kummy Shop】".format(your_name))

https://ithelp.ithome.com.tw/upload/images/20210927/20130354ekTFIQmt9r.png

这下心里果然实在了一点呀。

今天我们先把最基础的Django网站跑起来,可取得URL参数显示出来,明天再来伤脑筋我们要将网站架设在什麽地方,让永丰API可以将值传回来。


<<:  #27 JS: Timing Events - Part 1

>>:  [ Day 12 ] - <script> 标签放哪里~

Day 05-其他常结合Chatbot的云端服务器介绍

上一篇我们提到很多人会选择Azure来结合LineBot,其实还有很多提供免费方案的云端服务器!可以...

NoSQL备份与还原

再来实作所有资料库的重点, 备份与还原. 首先建立备份. 首先实作On-demand backup ...

Day 9 老照片效果

老照片效果 教学原文参考:老照片效果 这篇文章会介绍使用 GIMP 图层的混合模式,做出老旧照片的图...

Day03-Nginx 简介

安装 Nginx $ sudo apt-get update $ sudo apt-get inst...

day1_为什麽要选择 cpu 架构?

前言 随着 2020年 搭载 M1 晶片的 Apple MacBook 发表後,讨论是否该选购使用 ...