2012年12月21日星期五

.Net 集成汇付天下


      网找了好久没有找到相关的资料,都是提问的没有回答,在这里发一下,做为笔记吧!

第一步:准备资料
      开通汇付天下后,需要从http://mas.chinapnr.com/gam 下需二个签名验签DLL文件(ChinaPnr.dll,pnrpay.dll),这个是用来做RSA加解密的.
另外分别是两个Key文件,分别提公钥与私钥文件.例如:PgPubk.key与MerPrK510010.key.

第二步:官方推荐是在服务器上注册DLL文件
      例如你将DLL文件放在C:/DLL文件夹下面。则在“开始”-“运行”中输入regsvr32 C:\DLL\ChinaPnr.dll,个人不推荐这样做,特别有的朋友是用虚拟机的,先不说提供商是否愿意,从安全角度来说也是有一定的风险性的.
我的方法是,DllImport使用非托管的方式来调用,msdn关于DllImport属性类的链接:
http://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.dllimportattribute(v=VS.100).aspx
//将两个DLL放在Web站点的Bin目录下
[DllImport("pnrpay.dll", EntryPoint = "SignMsg")]
public static extern int SignMsg(string MerId, string MerPubFile, string MsgData, int MsgLen, StringBuilder chkVal);

[DllImport("pnrpay.dll", EntryPoint = "VeriSignMsg")]
public static extern int VeriSignMsg(string MerKeyFile, string MsgData, int MsgLen, string chkVal);
       
第三步:创建支付订单
      参数说明,就请自己参考文档了.
string msgData = Version + CmdId + MerId + OrdId + OrdAmt + CurCode + Pid + RetUrl + MerPriv + GateId + UsrMp + DivDetails + PayUsrId + BgRetUrl;
string chkVal = string.Empty;
//私钥文件的位置(这里是放在了站点的根目录下)
string pubPath = AppDomain.CurrentDomain.BaseDirectory + "MerPrK510010.key";
StringBuilder outchkVal = new StringBuilder(256);
//需要指定提交字符串的长度,汇付天下没有指定编码的功能,他们只接受GBK的数据,而且开发文档里面也不说明这个.
int len = Encoding.GetEncoding(936).GetBytes(msgData).Length;
int flag = SignMsg(this.MerId, pubPath, msgData, len, outchkVal);
this.ChkVal = outchkVal.ToString();
//填充为POST提交就OK啦!

最后:再写一个检验的方法
 
//我的站点是UTF8的.一开始,怎么都无法检验正确,后来联系了汇付才知道,他们的POST都是GBK的.在处理长度时需要注意.
public int CheckSignMsg(string msgData, string chkVal)
{
    string pubPath = AppDomain.CurrentDomain.BaseDirectory + "PgPubk.key";
    int len = Encoding.GetEncoding(936).GetBytes(msgData).Length; //需要取得GBK编码时的长度.
    return VeriSignMsg(pubPath, msgData, len, chkVal);
}
注意:
如果你发现UTF8站点不做转码也可以正常验证,那是因为返回的字符串是全英文和数字的.做退款异步通知时,他的POST数据中就有中文,需要注意.如果你的站点也是GBK的那么就不用处理了.

任天堂Wii游戏机使用体验


任天堂Wii游戏机使用体验

  前几天新购买了一台任天堂的最新游戏机WII,花了1900元。这也是我购买的第四台家用游戏机了,前面的几台分别是索尼的PS和PS2以及任天堂的掌机GBA.现在我拥有的索尼和任天堂的游戏机正好相等。
  Wii是任天堂的新一代游戏机,其操作方式非常独特,游戏可以感应出玩家所做出的各种动作,试图带给玩家一种全新的游戏概念。
WII的外观非常精巧
  任天堂的Wii非常小巧玲珑,采用纯白色设计,看起来非常精致。任天堂Wii设计了一个银色的底座,原本方方正正的Wii放入底座之后,会将光驱舱稍稍提起,形成一个非规则的外形。
Wii的手柄很独特
  Wii的最大特色就是非同一般的操控体验。内置了特殊芯片的Wiimote可以感应不同幅度的坐标变化,转化为可以控制游戏人物动作的信号。在运动类游戏的时候,这种操控体验尤为吸引人,你挥舞无线控制器,游戏里的人物也跟着挥动,效果非常不错。
  Wii Sports是Wii的必玩游戏,也是目前来说最好玩的Wii游戏之一,是一款体育题材的Wii主机首发游戏。
Wii Sports游戏
  这款体育游戏共收录了网球、棒球、拳击、高尔夫球和保龄球五大运动,利用Wii的感应手柄,玩家将可以很自然地作出挥拍、挥棒、挥拳、挥杆和掷球的动作。
Wii Sport支持4人同时游戏
  游戏还支持四人同乐,可以在朋友聚会的时候,在家里的客厅里享受室外运动般的乐趣。
  这里,我发现Wii的游戏和SONY的游戏理念是不同的,索尼的游戏一般上手较难,操作复杂,故事性和解谜性强。而任天堂则追求的游戏的快乐理念,游戏非常简单很容易上手,很多非传统游戏玩家都可以玩Wii。
  做为索尼游戏机的忠实玩家,我玩PS和PS2游戏的时间是非常多的,总的来说,我感觉PS和PS2的游戏都很好玩,PS除了显示效果不太好以外,有不少非常经典的游戏,PS2上的游戏则更多了,这两代游戏机都是非常成功的游戏机。
  而Wii和PS2操作游戏的感觉完全不一样,Wii的操作非常直观,操作起来也不错,但是对于传统类似动作或冒险类型的游戏,Wii的有些操作反而会更麻烦。对于第一人称射击游戏来说,Wii比PS2要好操作一些,但似乎不如电脑鼠标容易瞄准。
  可惜,目前Wii的游戏还比较少,除了Wii Sports以外,玩了几个都没什么意思。Wii Sports还是比较好玩的,打一下还是挺累的,有人说Wii有健身效果,也有一种说法是Wii可能会对身体造成伤害,根据我的使用结果表明,第一天打了Wii Sports之后,次日右臂就有轻微的酸痛感,可能是Wii Sports这类游戏对于手臂有一定的影响,也可能是我平时锻炼太少的原因。
  Wii是兼容任天堂的NGC游戏机的,我也顺便玩了几个NGC的游戏,如生化危机0和生化危机1,CAPCOM的游戏还是比较经典的,可惜这两款作品的销售量都不大,但无疑,做为生化危机的老玩家,我发现这两个版本的生化危机画面和效果都非常出色(不知道是不是和NGC上的效果一样),比生化危机4都好,有时间一定都玩一下。
  有意思的是,有不少游戏,我同时拥有PS2,Wii和PC三个版本,例如生化危机4和使命召唤3,等我稍后有时间,可以玩玩这些游戏,看看在不同主机环境下这些游戏有什么区别和特色。
  总的来说,Wii目前还缺少一些游戏大作的支持,画面也不是特别好,希望Wii能多出一些耐玩的大作,总不能老玩NGC的游戏吧,否则的话,如果PS3的价格能降低到Wii的价格水平,那么PS3未必会败给Wii,不要低估了索尼的能力啊。