找回密碼
 註冊
搜索
查看: 329|回復: 0

[教學] Flask 如何使用 綠界ecpay範例代碼?

[複製鏈接]
發表於 4 天前 | 顯示全部樓層 |閱讀模式
Push to Facebook
開發金流時一定會遇到一些鳥問題
主要是伺服器是對方的
以下就是我遇到的問題,如圖

Flask,綠界,ecpay,模板,render_template

Flask,綠界,ecpay,模板,render_template


1. 到github 下載綠界的範例代碼

2. 把代碼放入CPanel Flask 下的目錄

範例 mvc-new/base 目錄下
打開 sample_create_order_ALL.py檔案
修改一下如下

  1. # -*- coding: utf-8 -*-
  2. from base import app
  3. from flask import render_template,render_template_string
  4. import importlib.util
  5. spec = importlib.util.spec_from_file_location(
  6.     "ecpay_payment_sdk",
  7.     "/home/flask/mvc-new/base/ecpay_payment_sdk.py"
  8. )
  9. module = importlib.util.module_from_spec(spec)
  10. spec.loader.exec_module(module)
  11. from datetime import datetime

  12. @app.route('/create_order_sample', methods=['POST'])
  13. def create_order_sample():

  14.     order_params = {
  15.         'MerchantTradeNo': datetime.now().strftime("NO%Y%m%d%H%M%S"),
  16.         'StoreID': '',
  17.         'MerchantTradeDate': datetime.now().strftime("%Y/%m/%d %H:%M:%S"),
  18.         'PaymentType': 'aio',
  19.         'TotalAmount': 2000,
  20.         'TradeDesc': '訂單測試',
  21.         'ItemName': '商品1#商品2',
  22.         'ReturnURL': 'https://www.ecpay.com.tw/return_url.php',
  23.         'ChoosePayment': 'ALL',
  24.         'ClientBackURL': 'https://www.ecpay.com.tw/client_back_url.php',
  25.         'ItemURL': 'https://www.ecpay.com.tw/item_url.php',
  26.         'Remark': '交易備註',
  27.         'ChooseSubPayment': '',
  28.         'OrderResultURL': 'https://www.ecpay.com.tw/order_result_url.php',
  29.         'NeedExtraPaidInfo': 'Y',
  30.         'DeviceSource': '',
  31.         'IgnorePayment': '',
  32.         'PlatformID': '',
  33.         'InvoiceMark': 'N',
  34.         'CustomField1': '',
  35.         'CustomField2': '',
  36.         'CustomField3': '',
  37.         'CustomField4': '',
  38.         'EncryptType': 1,
  39.     }

  40.     extend_params_1 = {
  41.         'ExpireDate': 7,
  42.         'PaymentInfoURL': 'https://www.ecpay.com.tw/payment_info_url.php',
  43.         'ClientRedirectURL': '',
  44.     }

  45.     extend_params_2 = {
  46.         'StoreExpireDate': 15,
  47.         'Desc_1': '',
  48.         'Desc_2': '',
  49.         'Desc_3': '',
  50.         'Desc_4': '',
  51.         'PaymentInfoURL': 'https://www.ecpay.com.tw/payment_info_url.php',
  52.         'ClientRedirectURL': '',
  53.     }

  54.     extend_params_3 = {
  55.         'BindingCard': 0,
  56.         'MerchantMemberID': '',
  57.     }

  58.     extend_params_4 = {
  59.         'Redeem': 'N',
  60.         'UnionPay': 0,
  61.     }

  62.     inv_params = {
  63.         # 'RelateNumber': 'Tea0001', # 特店自訂編號
  64.         # 'CustomerID': 'TEA_0000001', # 客戶編號
  65.         # 'CustomerIdentifier': '53348111', # 統一編號
  66.         # 'CustomerName': '客戶名稱',
  67.         # 'CustomerAddr': '客戶地址',
  68.         # 'CustomerPhone': '0912345678', # 客戶手機號碼
  69.         # 'CustomerEmail': 'abc@ecpay.com.tw',
  70.         # 'ClearanceMark': '2', # 通關方式
  71.         # 'TaxType': '1', # 課稅類別
  72.         # 'CarruerType': '', # 載具類別
  73.         # 'CarruerNum': '', # 載具編號
  74.         # 'Donation': '1', # 捐贈註記
  75.         # 'LoveCode': '168001', # 捐贈碼
  76.         # 'Print': '1',
  77.         # 'InvoiceItemName': '測試商品1|測試商品2',
  78.         # 'InvoiceItemCount': '2|3',
  79.         # 'InvoiceItemWord': '個|包',
  80.         # 'InvoiceItemPrice': '35|10',
  81.         # 'InvoiceItemTaxType': '1|1',
  82.         # 'InvoiceRemark': '測試商品1的說明|測試商品2的說明',
  83.         # 'DelayDay': '0', # 延遲天數
  84.         # 'InvType': '07', # 字軌類別
  85.     }

  86.     # 建立實體
  87.     ecpay_payment_sdk = module.ECPayPaymentSdk(
  88.         MerchantID='3002607',
  89.         HashKey='pwFHCqoQZGmho4w6',
  90.         HashIV='EkRm7iFT261dpevs'
  91.     )

  92.     # 合併延伸參數
  93.     order_params.update(extend_params_1)
  94.     order_params.update(extend_params_2)
  95.     order_params.update(extend_params_3)
  96.     order_params.update(extend_params_4)

  97.     # 合併發票參數
  98.     order_params.update(inv_params)

  99.     try:
  100.         # 產生綠界訂單所需參數
  101.         final_order_params = ecpay_payment_sdk.create_order(order_params)

  102.         # 產生 html 的 form 格式
  103.         action_url = 'https://payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V5'  # 測試環境
  104.         # action_url = 'https://payment.ecpay.com.tw/Cashier/AioCheckOut/V5' # 正式環境
  105.         html = ecpay_payment_sdk.gen_html_post_form(action_url, final_order_params)
  106. print(html)
  107.     except Exception as error:
  108.         print('An exception happened: ' + str(error))
複製代碼


這時提交網頁會跑到/create_order_sample下
會出現錯誤找到 /var/log/apache2/error_log
  1. 錯誤代碼
  2. App 2809284 output: TypeError: The view function for 'create_order' did not return a valid response. The function either returned None or ended without a return statement.
  3. App 2809284 output: 404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
複製代碼
問了綠界,他說可能是編碼問題 (要轉成UTF-8)
結果測了半天,還是沒解開問題
最後google
  1. The view function for 'create_order' did not return a valid response.
複製代碼
再看了程式碼才發現,原來是模板沒有回傳
把上面
  1. print(html)
複製代碼
改成
  1. return html
複製代碼
就可以了

Flask,綠界,ecpay,模板,render_template

Flask,綠界,ecpay,模板,render_template


文章來源:NetYea 網頁設計



您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

Archiver|手機版|小黑屋|TShopping

GMT+8, 2025-10-6 14:34 , Processed in 0.027181 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表