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# 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);
}

使用raspberry樹莓派搭配homebridge接上你的ios homekit功能

2014年Apple在推出IOS8時就推了HomeKit(家庭)這個服務,簡單來說就是用ios/ipad搭配siri就可以操作物聯網。
不過要通過HomeKit認證需要費用,幸好後來有了Homebridge這個介接的服務,而Homebridge的技術是使用javascript/node.js達成。
於是在樹莓派上建置node.js環境,並安裝homebridge後,再搭配樹莓派的GPIO就可以做到跟手機整合的物聯網了。

相關資源:
2014 WWDC homekit介紹 https://developer.apple.com/videos/play/wwdc2014/213/
結合樹莓派的自動澆水系統 https://www.sharpoblunto.com/News/2016/01/31/it-gets-the-hose-again
樹莓派與homebridge的結合教學 https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi
打造Raspberry Pi 無線坦克車(PiTank) https://dotblogs.com.tw/bowwowxx/2015/06/10/151535
Node.js控制树莓派GPIO https://eliyar.biz/nodejs-raspberry-gpio/
樹莓派.使用Node.js控制GPIO https://hk.saowen.com/a/3bf3756deb7956495899f21631873f67ac9bdde4697effac203b0ff60a278aba
Blynk 物聯網平台: How to install Node.js library on Linux(control LED) http://agile.myds.me/2017/10/12/blynk-%E7%89%A9%E8%81%AF%E7%B6%B2%E5%B9%B3%E5%8F%B0%EF%BC%9A-install-node-js-library-linux%EF%BC%88control-led%EF%BC%89/
只管出一張嘴:用 Siri 控制家裡的老家電 http://benjenq.pixnet.net/blog/post/45202620-%E5%8F%AA%E7%AE%A1%E5%87%BA%E4%B8%80%E5%BC%B5%E5%98%B4%EF%BC%9A%E7%94%A8-siri-%E6%8E%A7%E5%88%B6%E5%AE%B6%E8%A3%A1%E7%9A%84%E8%80%81%E5%AE%B6%E9%9B%BB
Raspberry Pi 的應用 – Siri + HomeKit 讓我們的家電變自動也更智慧 http://blog.itist.tw/2017/11/how-to-building-apple-smart-home-solution-by-homebridge-on-raspberry-pi.html
玩转树莓派第一弹:HomeBridge控制LED灯 http://blog.mindcont.com/2018/01/03/raspberrypi-homebridge/