|
@@ -11,6 +11,7 @@ import json
|
|
|
import qrcode
|
|
|
from PIL import Image
|
|
|
import base64, io
|
|
|
+from random import randrange
|
|
|
|
|
|
app = fastapi.FastAPI()
|
|
|
|
|
@@ -38,12 +39,11 @@ async def callback(request: fastapi.Request):
|
|
|
handler.handle(body.decode('utf-8'), signature)
|
|
|
return 'OK'
|
|
|
|
|
|
-
|
|
|
# nft collection api
|
|
|
@app.get("/collection/{userid}")
|
|
|
def collection(userid):
|
|
|
xname = userid
|
|
|
- sql = 'SELECT a.* FROM nft a INNER JOIN ( SELECT userid FROM users WHERE userid="' + xname + '" ) b ON b.userid = a.userid'
|
|
|
+ sql = 'SELECT a.* FROM nft a INNER JOIN ( SELECT userid FROM users WHERE userid="'+xname+'" ) b ON b.userid = a.userid'
|
|
|
result = db.query(sql)
|
|
|
rows = {}
|
|
|
i = 0
|
|
@@ -52,69 +52,90 @@ def collection(userid):
|
|
|
i += 1
|
|
|
return rows
|
|
|
|
|
|
-
|
|
|
# receive handler
|
|
|
@app.get("/receive/{userid}")
|
|
|
def receive(userid):
|
|
|
+ if not table.find_one(userid=userid):
|
|
|
+ return "ERROR: User Not Found"
|
|
|
+ else:
|
|
|
+ return {"base":(table.find_one(userid=userid))['base']}
|
|
|
+
|
|
|
+# TODO send handler 發送nft
|
|
|
+# @app.get("/collection/{userid}/{hash}")
|
|
|
+# def blockchain():
|
|
|
|
|
|
- # generate qr code from user id
|
|
|
- results = table.find_one(userid=userid)
|
|
|
- address = results['useraddress']
|
|
|
- qr = qrcode.QRCode(
|
|
|
- version=1,
|
|
|
- box_size=10,
|
|
|
- border=5)
|
|
|
- qr.add_data(address)
|
|
|
- qr.make(fit=True)
|
|
|
-
|
|
|
- img_qr = qr.make_image(fill='black', back_color='white')
|
|
|
- filename = "qrcode/" + userid + '.png'
|
|
|
- img_save = img_qr.save(filename)
|
|
|
-
|
|
|
- # open file
|
|
|
- im = Image.open(filename)
|
|
|
-
|
|
|
- # convert
|
|
|
- imgByteArr = io.BytesIO()
|
|
|
- im.save(imgByteArr, format='PNG')
|
|
|
-
|
|
|
- # decode to ascii
|
|
|
- x = imgByteArr.getvalue()
|
|
|
- base64.b64encode(x).decode('ascii')
|
|
|
- encode = base64.b64encode(x).decode('ascii')
|
|
|
-
|
|
|
- # add to db
|
|
|
- data = dict(base64=encode)
|
|
|
- result = data['base64']
|
|
|
- # print(data['base64'])
|
|
|
- # table.insert(data)
|
|
|
- table.update(dict(userid=userid, base=result), ['userid'])
|
|
|
+# TODO post blockchain api 上鏈nft
|
|
|
+# @app.get("/collection/{userid}/{art}")
|
|
|
+# def blockchain():
|
|
|
+
|
|
|
+# TODO get transaction update 取得交易結果
|
|
|
+# @app.get("/collection/{userid}")
|
|
|
+# def blockchain():
|
|
|
|
|
|
# follow event
|
|
|
@handler.add(FollowEvent)
|
|
|
def handle_follow(event):
|
|
|
# get user id when follow
|
|
|
real_user_id = event.source.user_id
|
|
|
- rand_num = '_test_000_000_002'
|
|
|
+ rand_num = randrange(999999)
|
|
|
user_id = event.source.user_id + rand_num
|
|
|
+ result = table.find_one(userid=real_user_id)
|
|
|
|
|
|
- # create user account
|
|
|
- url = 'https://nft-api-staging.joyso.io/api/v1/accounts'
|
|
|
- headers = {'Authorization': 'Basic bmZ0OmMxOTEzOWMzYjM3YjdjZWU3ZmY3OTFiZGU3NzdjZWNl'}
|
|
|
- # setup for temp use (unique id)
|
|
|
- data = 'uid=' + user_id
|
|
|
- r = requests.post(url=url, headers=headers, data=data)
|
|
|
- # extract the account address
|
|
|
- dict_str = json.loads(r.text)
|
|
|
- user_account = dict_str['account']
|
|
|
- user_address = user_account['address']
|
|
|
- # write in sql
|
|
|
- data = dict(userid=real_user_id, useraddress=user_address)
|
|
|
- table.insert(data)
|
|
|
- print(" Follow event: " + event.source.user_id)
|
|
|
- line_bot_api.reply_message(
|
|
|
- event.reply_token,
|
|
|
- TextSendMessage(text='歡迎加入好友'))
|
|
|
+ if result:
|
|
|
+ print(real_user_id)
|
|
|
+ line_bot_api.reply_message(
|
|
|
+ event.reply_token,
|
|
|
+ TextSendMessage(text='很高興再見到您!'))
|
|
|
+ else:
|
|
|
+ print("n")
|
|
|
+ # create user account
|
|
|
+ url = 'https://nft-api-staging.joyso.io/api/v1/accounts'
|
|
|
+ headers = {'Authorization': 'Basic bmZ0OmMxOTEzOWMzYjM3YjdjZWU3ZmY3OTFiZGU3NzdjZWNl'}
|
|
|
+ # setup for temp use (unique id)
|
|
|
+ data = 'uid=' + user_id
|
|
|
+ r = requests.post(url=url, headers=headers, data=data)
|
|
|
+ # extract the account address
|
|
|
+ dict_str = json.loads(r.text)
|
|
|
+ user_account = dict_str['account']
|
|
|
+ user_address = user_account['address']
|
|
|
+
|
|
|
+ # generate qr code from user id
|
|
|
+ qr = qrcode.QRCode(
|
|
|
+ version=1,
|
|
|
+ box_size=10,
|
|
|
+ border=5)
|
|
|
+ qr.add_data(user_address)
|
|
|
+ qr.make(fit=True)
|
|
|
+
|
|
|
+ img_qr = qr.make_image(fill='black', back_color='white')
|
|
|
+ filename = "qrcode/" + real_user_id + '.png'
|
|
|
+ img_save = img_qr.save(filename)
|
|
|
+
|
|
|
+ # open file
|
|
|
+ im = Image.open(filename)
|
|
|
+
|
|
|
+ # convert
|
|
|
+ imgByteArr = io.BytesIO()
|
|
|
+ im.save(imgByteArr, format='PNG')
|
|
|
+
|
|
|
+ # decode to ascii
|
|
|
+ x = imgByteArr.getvalue()
|
|
|
+ base64.b64encode(x).decode('ascii')
|
|
|
+ encode = base64.b64encode(x).decode('ascii')
|
|
|
+
|
|
|
+ # add to db
|
|
|
+ data = dict(base64=encode)
|
|
|
+ result = data['base64']
|
|
|
+ # table.update(dict(userid=userid, base=result), ['userid'])
|
|
|
+
|
|
|
+ # write in sql
|
|
|
+ data = dict(userid=real_user_id, useraddress=user_address, base=result)
|
|
|
+ table.insert(data)
|
|
|
+
|
|
|
+ print(" Follow event: " + event.source.user_id)
|
|
|
+ line_bot_api.reply_message(
|
|
|
+ event.reply_token,
|
|
|
+ TextSendMessage(text='歡迎加入好友'))
|
|
|
|
|
|
# message handler
|
|
|
@handler.add(MessageEvent, message=TextMessage)
|
|
@@ -140,21 +161,21 @@ def message(event):
|
|
|
actions=[
|
|
|
URITemplateAction(
|
|
|
label='打開接收頁面',
|
|
|
- uri='http://ark.cards/receive/' + event.source.user_id), ])
|
|
|
+ uri='http://ark.cards/receive/' + event.source.user_id),])
|
|
|
line_bot_api.reply_message(
|
|
|
event.reply_token,
|
|
|
TemplateSendMessage(
|
|
|
alt_text="Receive",
|
|
|
template=button_template_message))
|
|
|
|
|
|
- elif '我的收藏' in event.message.text:
|
|
|
+ elif '我的NFT收藏' in event.message.text:
|
|
|
button_template_message = ButtonsTemplate(
|
|
|
title=' ',
|
|
|
- text='點擊並打開接收頁面,即可分享接收地址給對方!',
|
|
|
+ text='點擊並打開收藏頁面,就可以查看所有的收藏品哦!',
|
|
|
actions=[
|
|
|
URITemplateAction(
|
|
|
- label='打開接收頁面',
|
|
|
- uri='http://ark.cards/collection/' + event.source.user_id), ])
|
|
|
+ label='打開我的NFT收藏頁面',
|
|
|
+ uri='http://ark.cards/collection/' + event.source.user_id),])
|
|
|
line_bot_api.reply_message(
|
|
|
event.reply_token,
|
|
|
TemplateSendMessage(
|
|
@@ -166,6 +187,5 @@ def message(event):
|
|
|
event.reply_token,
|
|
|
TextSendMessage(text="更多的服務內容,歡迎請上我們的官網!(http://ark.cards)"))
|
|
|
|
|
|
-
|
|
|
if __name__ == '__main__':
|
|
|
uvicorn.run("main:app", host="0.0.0.0", port=8228, reload=True)
|