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;

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

https://community.embarcadero.com/article/news/16638-rad-studio-august-2018-roadmap?utm_source=article&utm_medium=email&utm_content=Article-180815-RADStudioRoadMap?

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# 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 XE 10.2.3的升級 感謝embarcadero及台灣QCom


今年3月份embarcadero發佈10.2.3升級後,卻發生一直無法正常解除10.2.2的問題,後來求助台灣QCom捷康的幫忙後也無法解決,台灣捷康幫忙與總部聯繫。在連假第三天終於解決了!感謝台灣捷康Eddie Chang以及embarcadero support。

相關資源:
https://community.embarcadero.com/
www.qcomgroup.com.tw
https://community.embarcadero.com/article/articles-support/174-rad-studio/installation-registration/16501-manual-uninstall-of-rad-studio-delphi-c-builder-10-2