那些年我们赚过的外快(POS(移动支付)接口开发)
老规矩上前戏了。在我写博文"那些年我们赚过的外快"前后算起来大大小小也接了些私活,这次是因为好久没写博客了,趁热分享一下。最近回了离老家近的二线城市成都工作,收入那是下降很多啊,刚开始老婆还没说什么,随着开始还房贷和债务,生活开始捉襟见肘了。哎,最近都在发愁怎么增加收入!自己的想法是:1、争取多做几个安卓app出来发布到各大市场,靠植入广告赚点白菜钱。(还没验证过是否可行) 2、把之前积累好多年的行业管理软件的需求整理成几个软件,或基于云服务打造几款共享软件。(竞争很激烈啊,容易死在沙滩上和半途而废) 3、网上找个兼职 4、接些私活。昨晚看了xiaotie铁哥的博客<信念、思考、行动-谈谈程序员返回家乡的创业问题>很有些感觉,希望借此文重新和大家讨论下这个话题。
1、需求和接口文档





说明:这是一个之前私活的延伸出来的小单。就是做一个接口程序并和之前的业务系统(部分外包给本人)集成。
2、编码的过程和遇到的问题
编码时长:大概3小时。
编码工具:vs2010
遇到的问题:C#调用VC的动态库,外部引用DLL参数类型对应的问题。
函数原型:(接口:int Abmcs(char *request, char *response);)
第一版写法:
[DllImport("XGD_DLL.dll", CharSet = CharSet.Ansi)]
unsafe public static extern int Abmcs(string request, out StringBuilder response);
结果报内存不能写什么的,vc的出参 char *应该是个指针,一时不知道用什么类型去对应,以前看别人写StringBuilder 去接就可以了。
哎,还是基础不好啊,用String什么的都试了,还是不行,后来就想到用指针了,显然这是C#不推荐的做法,偶号称老鸟居然没在C#里用过指针,估计很多朋友都要看不下去了,
就这水平要接私活,还敢称老鸟!
第二版写法:
[DllImport("XGD_DLL.dll", CharSet = CharSet.Ansi)]
unsafe public static extern int Abmcs(string request, byte* response);
string requestTxt = request.GetRequestString();
byte[] buffer = new byte[144];
unsafe
{
fixed (byte* array = buffer)
{
Abmcs(requestTxt, array);
return new BankResponseEntity(Encoding.Default.GetString(buffer));
}
}
通过!对于要求“知其然就行了,可以不知其然”的ctrl+v大法深深崇拜的我很满足的笑了。
编码过程:
1)整理思路,根据文档整理出来类图(脑图,没画出来滴)。
2)动手写,然后遇到问题一番百度(最近Google不能访问啊),终于趟完一个坑,搞定。
成果物:


下面上点代码吧:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace MisposInterfaceLib
{
/// <summary>
/// 交易请求实体
/// </summary>
public class PosRequestEntity
{
protected string _TransactionTypeFlag; public PosRequestEntity(string transactionType)
{
_TransactionTypeFlag = transactionType;
} public string Value1
{
get;
set;
}
public string Value2
{
get;
set;
}
public string Value3
{
get;
set;
}
public string Value4
{
get;
set;
}
public string Value5
{
get;
set;
} /// <summary>
/// 获取请求文本
/// </summary>
/// <returns></returns>
public string GetRequestString()
{
return string.Join("|", new string[] { _TransactionTypeFlag, Value1, Value2, Value3, Value4, Value5, "" });
}
}
}
消息交互实体类定义
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace MisposInterfaceLib
{
/// <summary>
/// POS机回复实体类
/// </summary>
public class BankResponseEntity
{
protected string _ResultResponse; public BankResponseEntity(string resultResponse)
{
_ResultResponse = resultResponse;
SplitResponse();
} protected void SplitResponse()
{
string[] tempArray = _ResultResponse.Split("|".ToCharArray());
if (tempArray.Length > )
{
ResultCode = tempArray[];
授权码 = tempArray[];
卡号 = tempArray[];
金额 = tempArray[];
系统参考号 = tempArray[];
有效日期 = tempArray[];
交易日期 = tempArray[];
交易时间 = tempArray[];
MessageContext = tempArray[];
商户编号 = tempArray[];
终端号 = tempArray[];
}
} /// <summary>
/// 回复代码 00表示成功
/// </summary>
public string ResultCode
{
get;
set;
} public string 授权码
{
get;
set;
} public string 卡号
{
get;
set;
} public string 金额
{
get;
set;
} public string 系统参考号
{
get;
set;
} public string 有效日期
{
get;
set;
} public string 交易日期
{
get;
set;
} public string 交易时间
{
get;
set;
} public string MessageContext
{
get;
set;
} public string 商户编号
{
get;
set;
} public string 终端号
{
get;
set;
} /// <summary>
/// 交易请求是否成功
/// </summary>
public bool TransactionResultValue
{
get
{
return ResultCode.Equals("");
}
}
}
}
POS机返回消息实体定义
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices; namespace MisposInterfaceLib
{
/// <summary>
/// POS交易业务类
/// </summary>
public class MisPosTransaction : IMisposTransaction
{
[DllImport("XGD_DLL.dll", CharSet = CharSet.Ansi)]
unsafe public static extern int Abmcs(string request, byte* response); /// <summary>
/// 像POS机发起一个交易请求
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public BankResponseEntity SendTransactionRequest(PosRequestEntity request)
{
string requestTxt = request.GetRequestString();
byte[] buffer = new byte[144];
unsafe
{
fixed (byte* array = buffer)
{
Abmcs(requestTxt, array);
return new BankResponseEntity(Encoding.Default.GetString(buffer));
}
}
}
}
}
调用接口:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MisposInterfaceLib; namespace miposinterface
{
class Program
{
static void Main(string[] args)
{
IMisposTransaction ConsumeTransaction = new MisPosTransaction();
PosRequestEntity signInRequest = new PosRequestEntity(TransactionType.ConsumeFlag)
{
Value1 = "3098234.98",
Value2 = "111111",
Value3 = "222222",
Value4 = "123456",
Value5 = "333333"
};
var result = ConsumeTransaction.SendTransactionRequest(signInRequest);
Console.WriteLine(result.MessageContext);
}
}
}

好了,到处结束,文章还是太缺营养了(终于有点自知者明了)。但是不知道为什么这么晚还没睡意,希望今天的辛勤工作能迎来人生的安慰奖吧。
那些年我们赚过的外快(POS(移动支付)接口开发)的更多相关文章
- 支付宝WAP支付接口开发(Node/Coffee语言)
此博客不更新很久了, 更新的文档在这, 有兴趣到这里围观: http://neutra.github.io/2013/%E6%94%AF%E4%BB%98%E5%AE%9DWAP%E6%94%AF%E ...
- php支付宝在线支付接口开发教程【转】
php支付宝在线支付接口开发教程 这篇文章主要为大家详细介绍了php支付宝在线支付接口开发教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.什么是第三方支付 所谓第三方支付,就是一些和各 ...
- php微信支付接口开发程序
php微信支付接口开发程序讲解 微信支付接口现在也慢慢的像支付宝一个可以利用api接口来实现第三方网站或应用进行支付了, 下文整理了一个php微信支付接口开发程序并且己测试,有兴趣的朋友可进入参考. ...
- 支付宝WAP支付接口开发
支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...
- JAVA微信支付接口开发——支付
微信支付接口开发--支付 这几天在做支付服务,系统接入了支付宝.微信.银联三方支付接口.个人感觉支付宝的接口开发较为简单,并且易于测试. 关于数据传输,微信是用xml,所以需要对xml进行解析. 1. ...
- php微信支付接口开发程序(流程已通)
php微信支付接口开发程序(流程已通) 来源:未知 时间:2014-12-11 17:11 阅读数:11843 作者:xxadmin [导读] 微信支付接口现在也慢慢的像支付宝一个可以利 ...
- 【转】支付宝WAP支付接口开发
支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...
- windows下shopex农行支付接口开发笔记
1.首先是配置Java和tomcat 农行文档里的是linux下的说明.window下我们要按照以下在setclasspath.bat里设置JAVA_HOME,JRE_HOME(红色字体部分).设置这 ...
- 银盛支付ecshop,shopex,shopnc在线支付接口,php版本支付接口开发
最近应一个客户的要求,给他的一个ecshop商城开发银盛支付在线支付接口.银盛支付服务股份有限公司(简称银盛支付)成立于2009年7月,总注册资本14000万元人民币,员工队伍持续壮大.2011年5月 ...
随机推荐
- 设置jenkins代理
http://stackoverflow.com/documentation/jenkins/919/introduction-to-jenkins Natively, Jenkins runs on ...
- WebLogic 12c SpringMVC Jackson 冲突 java.lang.NoSuchMethodError: TypeFactory.constructParametrizedType(Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;)
<?xml version="1.0" encoding="UTF-8"?> <wls:weblogic-web-app xmlns:wls= ...
- 从range和xrange的性能对比到yield关键字(上)
使用xrange 当我们获取某个数量的循环时,我们惯用的手法是for循环和range函数,例如: for i in range(10): print i 这里range(10)生成了一个长度为10 ...
- node.js WebService异常处理(domain)以及利用domain实现request生命周期的全局变量
成熟的Web Service技术,例如Fast CGI.J2EE.php,必然会对代码异常有足够的保护,好的Web必然会在出错后给出友好的提示,而不是莫名其妙的等待504超时.而node.js这里比较 ...
- UWP开发-二维变换以及三维变换
在开发中,由于某些需求,我们可能需要做一些平移,缩放,旋转甚至三维变换,所以我来讲讲在UWP中这些变换的实现方法. 一. 二维变换: UIElement.RenderTransform a.Trans ...
- Maven之问题解决汇总
Maven使用中,遇到的问题及解决办法记录下来 pom.xml顶部报错问题解决方法:http://stackoverflow.com/questions/5074063/maven-error-fai ...
- How Tomcat works — 七、tomcat发布webapp
目录 什么叫发布 webapp发布方式 reload 总结 什么叫发布 发布就是让tomcat知道我们的程序在哪里,并根据我们的配置创建Context,进行初始化.启动,如下: 程序所在的位置 创建C ...
- .NET开发中经常用到的扩展方法
整理一下自己经常用到的几个扩展方法,在实际项目中确实好用,节省了不少的工作量. 1 匿名对象转化 在WinForm中,如果涉及较长时间的操作,我们一般会用一个BackgroundWorker来做封装 ...
- 如何实现LBS轨迹回放功能?含多平台实现代码
本篇文章告诉您,如何实现轨迹回放.并且提供了web端,iOS端,Android端3个平台的轨迹回放代码.拷贝后可以直接使用.另外,文末有小彩蛋,算是开发者的福利. Web端/JavaScript 实现 ...
- “代理XP”组件已作为此服务器安全配置的一部分被关闭的解决办法
代理XP”组件已作为此服务器安全配置的一部分被关闭.系统管理员可以使用sp_configure来启用“代理XP”.有关启用“代理XP”的详细信息,请参阅SQL Server联机丛书中的“外围应用配置器 ...