Delphi 連接 SSL TLS 1.2 第三方支付金流問題
台灣最近銀行與第三方支付、行動支付發展越來越快,而Delphi使用indy元件時,如果處理SSL網站時不是很容易。
後來找到了ipwork的元件還不錯用。
列一下關鍵的程式
ipwhttp1 := Tipwhttp.Create(Application); ipwhttp1.Config('CodePage=65001'); posturl:=posturl+'barcode='+sBarcode; ipwhttp1.Post(sPaymentURL+'?'+posturl); result:=UTF8ToString(ipwhttp1.TransferredData); ipwhttp1.free;
另外處理像SHA/AES等加解密也很方便
function GetTokenKey(s:String):String; var ipcHash1: TipcHash; begin ipcHash1 := TipcHash.Create(Application); ipcHash1.Reset(); ipcHash1.Algorithm := TipcHashAlgorithms(haSHA256); ipcHash1.InputMessage := s; ipcHash1.ComputeHash(); result :=lowercase(ipcHash1.HashValue); ipcHash1.Free; end;
PHP 使用 Line Login 帳號驗證登入
LINE Developers目前主要提供的服務有LINE Login登入、Messaging API訊息以及Clova Skill數位語音助理的功能。目前最多人使用的應該是Messaging API開發LINE 機器人服務,而LINE Login則可以與Facebook Login一樣讓使用者便利登入。以下介紹如何開發LINE Login.
一、進入LINE Developers官方網站(https://developers.line.me/en/) ,然後新增一個channel(Create new channel)。
二、我們要開發的是LINE Login,所以點選LINE Login
三、依序填入資料後按confirm確認,最後打勾同意開發者條款後按create即可
四、成功建立後,就會出現一個新的channel
五、接著要把 Channel ID以及 Channel secret記下來
六、接著在第二頁的App settings中,輸入Callback URL後按Update。
七、接著可以開始寫程式了!我們會使用的主要三個API為
Ⅰ https://access.line.me/oauth2/v2.1/authorize (登入連結)
Ⅱ https://api.line.me/oauth2/v2.1/token (取得Access Token)
Ⅲ https://api.line.me/v2/profile (取得登入者資料)
素材:Login Button(https://developers.line.me/en/docs/line-login/login-button/)
流程大致如下:
RAD STUDIO 2018Roadmap
最近釋出了RAD STUDIO 新的ROADMAP開發藍圖。最主要的大概是 Professional版本不用額外買mobile開發套件,然後多了一個可以給student且功能與Professional相近的Community版本。目前主要仍著重於 Mobile(Android/IOS)以及語法的增進。
參考資料:
https://community.embarcadero.com/blogs/entry/august-2018-roadmap-commentary-from-product-management
台灣電子商務網站常用金流線上付款服務-信用卡/ATM/超商代收/GooglePay/ApplePay
AWS/Azure/GCP免費或學生資源
Delphi 推出社群版本(Community Edition)
Delphi推出了全新的社群版本(Community Edition),不像先前的starter版本。而是專業版加上iOS/Android功能。如果寫開放源始碼/免費軟體都可以,商業版的話限制為
1年收入不超過5000美金(約15萬台幣)
2成員不超過5人
延伸閱讀:
Learn to Program with Community Edition
Introducing Delphi and C++Builder Community Edition
C# WebAPI呼叫方式
var client = new WebClient();
var method = "POST";
var parameters = new NameValueCollection
{
{ "NAME", "林壽山" },
};
var response_data = client.UploadValues("$$API網址$$", method, parameters);
var responseString = UnicodeEncoding.UTF8.GetString(response_data);
如果回傳是JSON
dynamic json = JToken.Parse(responseString) as dynamic;
C# AES加解密
最近常遇到需要使用AES加解密的需求,無論是網路傳輸/API相關的部份。
分享一下
Github原始碼下載
https://github.com/superlevin/CSharpAES
using System.Security.Cryptography;
public static string SHAEncrypt(string str)
{
var crypt = new System.Security.Cryptography.SHA256Managed();
var hash = new System.Text.StringBuilder();
byte[] crypto = crypt.ComputeHash(Encoding.UTF8.GetBytes(str));
foreach (byte theByte in crypto)
{
hash.Append(theByte.ToString("x2"));
// x小寫 X 大寫 x2 補0
}
return hash.ToString();
}
public static string AESEncrypt(string str, string strkey, string strivKey, bool isVasEncrypt = false)
{
var aesCipher = new AesManaged
{
KeySize = 128,
BlockSize = 128,
Mode = CipherMode.CBC,
Padding = PaddingMode.PKCS7
};
var keyStr = KeyGenerator(strkey);
var key = Convert.FromBase64String(keyStr);
var ivKey = Encoding.UTF8.GetBytes(strivKey);
var input = str;
var ivStr = Convert.ToBase64String(ivKey);
aesCipher.Key = key;
aesCipher.IV = ivKey;
byte[] b = System.Text.Encoding.UTF8.GetBytes(str); // plain text to be encrypted
ICryptoTransform encryptTransform = aesCipher.CreateEncryptor();
byte[] cipherText = encryptTransform.TransformFinalBlock(b, 0, b.Length);
return Convert.ToBase64String(cipherText);
}
public static string AESDecrypt(string encstring, string strkey, string strivKey)
{
var aesCipher = new AesManaged
{
KeySize = 128,
BlockSize = 128,
Mode = CipherMode.CBC,
Padding = PaddingMode.PKCS7
};
var keyStr = KeyGenerator(strkey);
var key = Convert.FromBase64String(keyStr);
aesCipher.Key = key;
aesCipher.IV = Encoding.UTF8.GetBytes(strivKey);
var encryptBytes = Convert.FromBase64String(encstring);
ICryptoTransform decryptTransform = aesCipher.CreateDecryptor();
byte[] plainText = decryptTransform.TransformFinalBlock(encryptBytes, 0, encryptBytes.Length);
return System.Text.Encoding.UTF8.GetString(plainText);
}
Delphi 強迫將半型英數字轉換成全型英數字
var
Chr : array [0..255] of char;
begin
// use Windows
LCMapString(
GetUserDefaultLCID(),
LCMAP_FULLWIDTH, // 轉換全型 LCMAP_HALFWIDTH 半型
PChar(Edit2.Text), // 傳入文字
Length(Edit2.Text) + 1,
chr, // 轉換後字串
Sizeof(chr) // 轉換後字串
);
Edit1.Text := Chr;
end;