美安Shop.com夥伴商店網站串接方式

美安原本是一家蠻有歷史的直銷公司,後來買下Shop.com後變成了世界知名網路購物網站。而最有亮點的大概是現金回饋方式。

舉個例子:你到良興購物網(EcLife)買電競滑鼠990元,直接連進去的話,他標990元,你就要買990元。

不過透過Shop.com的夥伴商店連結,可以給你2%的現金回饋,也就是990的電競滑鼠可以省下19.8元。

或是到華航買機票也是有2%的現金回饋~

如何讓你架設的網站,也能與美安串接呢?

1) 訂單新增一個欄位 RID VARCHAR(255)

2) 從夥伴商店連接進來的網址大概長得像 http://www.eclife.com.tw/index.aspx?RID=C1234567-u2687516322-v247163

3) 後面的RID就是我們要的,把它記錄起來(丟到COOKIE或是塞進input)
[php]
setcookie("SHOPCOMRID", $_GET[‘RID’]);
if(isset($_COOKIE[‘SHOPCOMRID’]))
{
$RID = $_COOKIE[‘SHOPCOMRID’];
}
[/php]

4) 最後每個月要出報表
1.交易日期
2.訂單編號(自訂/唯一值)
3.買家姓名
4.RID編號
5.產品名稱/代碼
6.網站零售價格
7.佣金金額(例:網站零售價格*2%)

Delphi路徑規劃函數

把上次Delphi結合簡易PHP路徑規劃,搬到XE3來用。
主要運用在
1) 餐飲系統的外送服務
2) 物流系統的地圖服務
發現Delphi XE3不用像上次D7一樣用到urlencode XD
[pascal]
uses IdURI,Vcl.OleCtrls, SHDocVw;
procedure TForm1.RoutePlan(sFrom, sTo: String; wb: TWebBrowser);
var str:String;
begin
str := ‘http://superlevin.ifengyuan.tw/mapapi.php?FROM=’+TIdURI.ParamsEncode(sFrom)+’&TO=’+TIdURI.ParamsEncode(sTo);
wb.Navigate(str);
end;
[/pascal]

台灣健保系統程式開發資源

下午看到一則新聞「區所健保讀卡慢 替代役男解決」,一位替代役男「替區公所改善健保卡讀卡機控制軟體,讓系統自動傳輸資料,以往每年要1個月完成的工作,現在2周就能搞定。」,這位替代役男來頭不小,他正是出身Tagtoo塔圖廣告平台的小Q(Colin Su),部落格本身就藏有許多好文。幸好沒有埋沒他的專長~

回歸正題,整理一下開發跟健保卡相關的程式資料

1) 衛生福利部中央健保局 健保卡資料下載區 http://bit.ly/1A46VMx

2) 醫事憑證管理中心 程式開發專屬網站 http://bit.ly/1BsK8H8

遠振推SSD虛擬主機

 

早上看到一直使用的虛擬主機商遠振的新廣告,推出SSD硬碟的新主機。

強調

  • 台灣罕見不限 MySQL 資料庫、FTP、Email、附加網域,最適合架設多網站的全功能虛擬主機方案!
  • 保留本機一份加四份異機備份,資料保障領先業界
  • 立即搬家享優惠,首年八折,再享免費搬遷服務

一直很喜歡它的主機服務。推給大家

遠振主機

網址:

https://host.com.tw

Mac系統上VMware Fusion修改Disk Size出現there is not enough space on the file system for the selected operation

因為虛擬機器上要重新安裝Delphi XE7 update1時空間不足,接著要把Virtual Machine的Disk Size加大後出現了”there is not enough space on the file system for the selected operation”。搞了好久才知道Virtual Disck要加大的容量,系統的可用空間需要大於它,也就是說如果你要從60G加大到70G的話,你的系統可用空間也要有70G以上才行。

Delphi結合簡易PHP路徑規劃

延續上一篇的文章,如何透過Delphi傳遞起訖點就能幫助做路徑規劃呢?透過Delphi的WebBrowser元件搭配遠端的PHP,傳遞參數可以做得到!

PHP的部份,我們主要是要傳遞FROM以及TO二個參數(以下不做解釋XD)
[php]
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>路徑規劃</title>
<style>
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<script>
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
var map;
var stepDisplay;
var markerArray = [];

function initialize() {
var rendererOptions = {
map: map,
suppressMarkers : true
}
directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
var fengyuan = new google.maps.LatLng(24.253706601916402, 120.72275021093753);
var mapOptions = {
zoom:17,
center: fengyuan
};
map = new google.maps.Map(document.getElementById(‘map-canvas’), mapOptions);
directionsDisplay.setMap(map);
stepDisplay = new google.maps.InfoWindow();
calcRoute();
}

function calcRoute() {
for (i = 0; i < markerArray.length; i++) {
markerArray[i].setMap(null);
}
markerArray = [];
var start = <?php echo ‘"’.($_GET["FROM"]).’"’; ?>;
var end = <?php echo ‘"’.($_GET["TO"]).’"’; ?>;
var request = {
origin:start,
destination:end,
travelMode: google.maps.TravelMode.WALKING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
showSteps(response);
}
});
}
function showSteps(directionResult) {
var myRoute = directionResult.routes[0].legs[0];
for (var i = 0; i < myRoute.steps.length; i++) {
var icon = "https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=" + i + "|FF0000|000000";
if (i == 0) {
icon = "https://chart.googleapis.com/chart?chst=d_map_xpin_icon&chld=pin|glyphish_walk|00FFFF|FF0000";
}
var marker = new google.maps.Marker({
position: myRoute.steps[i].start_point,
map: map,
icon: icon
});
attachInstructionText(marker,myRoute.steps[i].instructions);
markerArray.push(marker);
}

var marker = new google.maps.Marker({
position: myRoute.steps[i – 1].end_point,
map: map,
icon: "https://chart.googleapis.com/chart?chst=d_map_xpin_icon&chld=pin|glyphish_walk|ADDE63"
});
markerArray.push(marker);
}
function attachInstructionText(marker, text) {
google.maps.event.addListener(marker, ‘click’, function() {
stepDisplay.setContent(text);
stepDisplay.open(map, marker);
});
}
google.maps.event.addDomListener(window, ‘load’, initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
</body>
</html>
[/php]









DELPHI的部份,因為D7的URLENCODE有問題,所以我們另尋了一個解決的部份(見延伸閱讀)
[pas]
function HTTPEncode(const AStr: String): String;
const
NoConversion = [‘A’..’Z’,’a’..’z’,’*’,’@’,’.’,’_’,’-‘,’0′..’9′,’$’,’!’,””,'(‘,’)’];
var
Sp, Rp: PAnsiChar;
begin
SetLength(Result, Length(AStr) * 3);
Sp:= PAnsiChar(AStr);
Rp:= PAnsiChar(Result);
while Sp^ <> #0 do
begin
if Sp^ in NoConversion then
Rp^ := Sp^
else
if Sp^ = ‘ ‘ then
Rp^ := ‘+’
else
begin
FormatBuf(Rp^, 3, ‘%%%.2x’, 6, [Ord(Sp^)]);
Inc(Rp,2);
end;
Inc(Rp);
Inc(Sp);
end;
SetLength(Result, Rp – PAnsiChar(Result));
end;
function URLEncode(const Url: String): String;
begin
Result:= HttpEncode(UTF8Encode(Url));
end;
[/pas]
最後在畫面上佈置出二個Edit以及一個Button,以及WebBrowser。程式很簡單
[pas]
procedure TForm1.Button1Click(Sender: TObject);
var
str:WideString;
begin
str := ‘http://你的php位置?FROM=’+URLEncode(edit1.text)+’&TO=’+URLEncode(edit2.text);
self.WebBrowser1.Navigate(str);
end;
[/pas]

延伸閱讀:
Delphi URLEncode問題解決
http://alexey-m.ru/articles/urlencode-utf-8-windows1251

Google Map 路徑規劃API測試

Google Map是筆者覺得很棒的一項服務,而且Google也很佛心的提供開發的API(雖然有次數限制)。因為住豐原的關係,常常聽到週遭朋友說不知道那些可以去,所以就嘗試玩了一下路徑規劃。其實也還不複雜~例出主要的部份

JavaScript

[js]
var start = document.getElementById(‘start’).value; // 起點(可以是地址或是經緯度)
var end = document.getElementById(‘end’).value; // 終點(可以是地址或是經緯度)

var request = {
origin:start,
destination:end,
travelMode: google.maps.TravelMode.WALKING // 設成步行 (預設是google.maps.TravelMode.DRIVING 開車)
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
[/js]

延伸閱讀:
Google Map API 3.0 https://developers.google.com/maps/documentation/javascript/directions?hl=zh-tw

讓佛祖、耶酥一起保佑程式碼無BUG,比乖乖有效?

微博上看到各國機房為了確保主機穩定不出怪事,請出法師、大師、神父到機房作法、禱告。

台灣最聞名的就是放乖乖了,然後要記得是綠燈(正常)的椰子乖乖:)

最近程式設計師流行直接寫在CODE裡,像上次寫的機器上除了要擺乖乖外,程式碼也該加上佛祖保佑,今天更出現耶穌版本。

[pascal]
// |~~~~~~~|
// | |
// | |
// | |
// | |
// | |
// |~.\\\_\~~~~~~~~~~~~~~xx~~~ ~~~~~~~~~~~~~~~~~~~~~/_//;~|
// | \ o \_ ,XXXXX), _..-~ o / |
// | ~~\ ~-. XXXXX`)))), _.–~~ .-~~~ |
// ~~~~~~~`\ ~\~~~XXX’ _/ ‘;)) |~~~~~~..-~ _.-~ ~~~~~~~
// `\ ~~–`_\~\, ;;;\)__.—.~~~ _.-~
// ~-. `:;;/;; \ _..-~~
// ~-._ `” /-~-~
// `\ / /
// | , | |
// | ‘ / |
// \/; |
// ;; |
// `; . |
// |~~~—–…..|
// | \ \
// | /\~~–…__ |
// (| `\ __-\|
// || \_ /~ |
// |) \~-‘ |
// | | \ ‘
// | | \ :
// \ | | |
// | ) ( )
// \ /; /\ |
// | |/ |
// | | |
// \ .’ ||
// | | | |
// ( | | |
// | \ \ |
// || o `.)|
// |`\\\\) |
// | |
// | |
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// 耶穌保佑 永無 BUG
[/pascal]
同場加映
[pascal]
//
// _oo0oo_
// o8888888o
// 88" . "88
// (| -_- |)
// 0\ = /0
// ___/`—‘\___
// .’ \\| |// ‘.
// / \\||| : |||// \
// / _||||| -:- |||||- \
// | | \\\ – /// | |
// | \_| ”\—/” |_/ |
// \ .-\__ ‘-‘ ___/-. /
// ___’. .’ /–.–\ `. .’___
// ."" ‘< `.___\_<|>_/___.’ >’ "".
// | | : `- \`.;`\ _ /`;.`/ – ` : | |
// \ \ `_. \_ __\ /__ _/ .-` / /
// =====`-.____`.___ \_____/___.-`___.-‘=====
// `=—=’
//
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// 佛祖保佑 永無bug
//
//***************************************************
[/pascal]