1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 网上支付(支付宝/银联)

网上支付(支付宝/银联)

时间:2023-04-20 20:37:18

相关推荐

网上支付(支付宝/银联)

网上支付(支付宝/银联)

一 支付宝/银联:

0 TD_MARCHANT(ID NUMBER NAME PASSWORD EMAIL URL STATUS CREATEBY CREATEDATE LADTEDITBY LASTEDITDATE DELETEBY DELETEDATE) 当前商户/支付宝商户/银联商户

0 TD_ORDER(ID ORDERNUM MARCHANTID COURSEID USERID PAYMETHOD PAYSTATUS CREATEDATE) PAYSTATUS 支付状态 W Y Z

1 创建商户表/订单表

1 设置传递参数/回调参数的model

1 后台商户管理(DIDAO/支付宝/银联)

0 判断课程是否可用,如果可学,就不需要再支付

1 获得请求(COURSEID)

2 设置传入参数(通过 获得课程信息/商户信息/第三方信息即秘钥)

3 设置sign

3 插入订单表TD_ORDER(未支付)

4 调用接口传入所需参数

5 获得接口回调的参数

6 计算sign

7 判断回传sign和计算的sign是否相等

8 如果相等,更新TD_ORDER状态和插入TD_USERCOURSE

9 调转到该课程所在的章节列表

注意:

md5加密必须是utf-8的二进制转小写

购买该课程之前,需要先检查是该课程已经可用,如果可用,不需要购买

二 支付宝支付:

支付宝模拟器 /

流程参考《实物商品交易服务集成技术文档2.0.pdf》

网关地址/AliPay/PayGate.ashx

网关参数说明:

partner:商户编号

return_url:回调商户地址(通过商户网站的哪个页面来通知支付成功!)

subject:商品名称

body:商品描述

out_trade_no:订单号!!!(由商户网站生成,支付宝不确保正确性,只负责转发。)

total_fee:总金额

seller_email:卖家邮箱

sign:数字签名。为按顺序连接 总金额、 商户编号、订单号、商品名称、商户密钥的MD5值。

回调商户接口地址参数说明:

out_trade_no:订单号。给PayGate.ashx传过去的out_trade_no再传回来

returncode:返回码,字符串。ok为支付成功,error为支付失败。

total_fee:支付金额

sign:数字签名。为按顺序连接 订单号、返回码、支付金额、商户密钥为新字符串的MD5值。

三 银联支付:

流程参考《网银在线支付B2C系统商户接口文档.zip》

网关地址/ChinaBank/PayGate.ashx

网关参数说明:

v_mid:商户编号

v_oid:订单号

v_amount:总金额

v_moneytype:币种。0为人民币,1为外币。

v_url:回调商户地址

v_md5info:数字签名。为按顺序连接 总金额、币种、订单号、商户编号、商户密钥为新字符串的MD5值。

style:网关模式:0(普通列表),2(银行列表中带外卡)

remark1:备注1。可空。

remark2:备注2。可空。

回调商户接口地址参数说明:

v_oid:订单号

v_pmode:支付银行。目前值衡为0.

v_pstatus:支付结果。20为成功,30为支付失败

v_amount:总金额

v_moneytype:币种。0为人民币,1为外币。

remark1:传递的备注1。

remark2:传递的备注1。

v_md5str:数字签名。为按顺序连接 订单号、支付结果、总金额、币种、商户密钥为新字符串的MD5值。

四 实例(支付宝支付/银联支付):

#region 支付public void paymethod(HttpContext context){#region 支付方式string courseidStr = context.Request["courseid"];int courseid = VolidHelper.CheckStrToInt(courseidStr);#region 如果可用,就不用购买#region 获得该课程object obj = new MyORM_BLL().SelectModelById(typeof(TD_COURSE), 1, courseid);if (obj == null){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到该课程:courseid=" + courseid });return;}TD_COURSE course = obj as TD_COURSE;#endregion#region 获得当前用户IDlong? carrid = LoginHelper.GetSessionID(context);if (carrid == null){context.Response.Redirect("/Login/LoginController.ashx?action=index");return;}long currid = Convert.ToInt64(carrid);#endregionbool flag = new CourseBLL().CheckCourseIsLearn(course, currid);if (flag){context.Response.Redirect("/Course/CourseController_chapter" + courseid + ".ashx");return;}#endregionRazorHelper.RazorParse(context, "~/Course/PayMethod.cshtml", new { courseid = courseid });#endregion}public void alipaycome(HttpContext context){#region 支付宝 传参数#region 逻辑//1 获得请求(COURSEID MARCHANTID) //2 设置传入参数(获得课程信息 和商户信息)//3 设置sign //3 插入订单表TD_ORDER(未支付)//4 调用接口传入所需参数 #endregion//获得请求(COURSEID MARCHANTID) string courseidStr = context.Request["courseid"];int courseid = VolidHelper.CheckStrToInt(courseidStr);#region 获得该课程object obj = new MyORM_BLL().SelectModelById(typeof(TD_COURSE), 1, courseid);if (obj == null){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到该课程:Courseid=" + courseid });return;}TD_COURSE course = obj as TD_COURSE;#endregion#region 获得当前商户object objMarchant = new MyORM_BLL().SelectModelById(typeof(TD_MARCHANT), 1, 1); //id=1 表示当前商户为DIDAOif (objMarchant == null){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到当前商户:MarchantID=1" });return;}TD_MARCHANT curriMarchant = objMarchant as TD_MARCHANT;#endregion#region 获得当前支付第三方信息(约定的秘钥)object objAlipay = new MyORM_BLL().SelectModelById(typeof(TD_MARCHANT), 1, 2); //id=2 表示当前商户为支付宝if (objAlipay == null){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到当前支付第三方信息:MarchantID=2" });return;}TD_MARCHANT alipay = objAlipay as TD_MARCHANT;#endregion//设置传入参数(获得课程信息 和商户信息)TD_Alipay_ParaCome apc = new TD_Alipay_ParaCome();#region 实例化 apcapc.body = course.NAME + "很不错";apc.out_trade_no = Guid.NewGuid().ToString();apc.partner = curriMarchant.NUM;apc.return_url = curriMarchant.URL + "Course/CourseController.ashx?action=alipayresult";apc.seller_email = curriMarchant.EMAIL;apc.subject = course.NAME;apc.total_fee = course.PRICE.ToString();#endregionapc.sign = CommonHelper.Md5EncodeByUTF8(apc.total_fee + apc.partner + apc.out_trade_no + apc.subject + alipay.PASSWORD).ToLower();//插入订单表TD_ORDER(未支付)#region 获得当前用户IDlong? carrid = LoginHelper.GetSessionID(context);if (carrid == null){context.Response.Redirect("/Login/LoginController.ashx?action=index");return;}long currid = Convert.ToInt64(carrid);#endregionTD_ORDER order = new TD_ORDER();#region 实例化 orderorder.COURSEID = courseid;order.CREATEDATE = DateTime.Now;order.MARCHANTID = curriMarchant.ID;order.ORDERNUM = apc.out_trade_no;order.PAYMETHOD = "Z";order.PAYSTATUS = "W";order.USERID = currid;#endregionbool flag = new MyORM_BLL().InsertModel(order, "SE_TD_ORDER");context.Response.Redirect("/AliPay/PayGate.ashx?partner=" + apc.partner+ "&return_url=" + apc.return_url+ "&subject=" + apc.subject+ "&body=" + apc.body+ "&out_trade_no=" + apc.out_trade_no+ "&total_fee=" + apc.total_fee+ "&seller_email=" + apc.seller_email+ "&sign=" + apc.sign);#endregion}public void alipayresult(HttpContext context){#region 支付宝 回传结果#region /获得接口回调的参数 验证TD_Alipay_ParaResult apr = new TD_Alipay_ParaResult();apr.out_trade_no = context.Request["out_trade_no"];apr.returncode = context.Request["returncode"];apr.total_fee = context.Request["total_fee"];apr.sign = context.Request["sign"];#endregion#region 获得当前支付第三方信息(约定的秘钥)object objAlipay = new MyORM_BLL().SelectModelById(typeof(TD_MARCHANT), 1, 2); //当前商户if (objAlipay == null){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到当前支付第三方信息:MarchantID=2" });return;}TD_MARCHANT alipay = objAlipay as TD_MARCHANT;#endregion//判断回传sign和计算的sign是否相等 string signinner = CommonHelper.Md5EncodeByUTF8(apr.out_trade_no + apr.returncode + apr.total_fee + alipay.PASSWORD).ToLower();if (string.IsNullOrWhiteSpace(apr.sign) || signinner != apr.sign){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "支付返回失败:签名错误" });return;}//如果相等,更新TD_ORDER状态和插入TD_USERCOURSEbool flag = new MyORM_BLL().UpdateFieldByField(typeof(TD_ORDER), "PAYSTATUS='Y'", "ORDERNUM='" + apr.out_trade_no + "'");if (!flag){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "支付返回时:更新数据库订单失败" });return;}#region 根君订单号查询订单List<object> list = new MyORM_BLL().SelectModelByField(typeof(TD_ORDER), "ORDERNUM='" + apr.out_trade_no + "'");if (list.Count < 1){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "支付返回时:未查询到数据库中订单 ORDERNUM=" + apr.out_trade_no });return;}else if (list.Count > 1){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "支付返回时:数据库异常,查询到重复的订单 ORDERNUM=" + apr.out_trade_no });return;}TD_ORDER order = list[0] as TD_ORDER;#endregion#region 获得当前用户IDlong? carrid = LoginHelper.GetSessionID(context);if (carrid == null){context.Response.Redirect("/Login/LoginController.ashx?action=index");return;}long currid = Convert.ToInt64(carrid);#endregionTD_USERCOURSE uc = new TD_USERCOURSE();#region 实例化 ucuc.ACTIVEDATE = DateTime.Now;uc.COURSEID = order.COURSEID;uc.EXPIREDATE = DateTime.Now.AddDays(30);uc.USERID = currid;#endregionbool flagUC = new MyORM_BLL().InsertModel(uc, "SE_TD_USERCOURSE");RazorHelper.RazorParse(context, "~/Course/PayResult.cshtml", new { courseid = order.COURSEID, msg = "支付宝支付成功,点击查看该课程列表" });#endregion}public void ebankcome(HttpContext context){#region 银联支付 传参#region 逻辑//1 获得请求(COURSEID) //2 设置传入参数(通过 获得课程信息/商户信息/第三方信息即秘钥)//3 设置sign //3 插入订单表TD_ORDER(未支付)//4 调用接口传入所需参数#endregion//获得请求(COURSEID MARCHANTID) string courseidStr = context.Request["courseid"];int courseid = VolidHelper.CheckStrToInt(courseidStr);#region 获得该课程object obj = new MyORM_BLL().SelectModelById(typeof(TD_COURSE), 1, courseid);if (obj == null){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到该课程:Courseid=" + courseid });return;}TD_COURSE course = obj as TD_COURSE;#endregion#region 获得当前商户object objMarchant = new MyORM_BLL().SelectModelById(typeof(TD_MARCHANT), 1, 1); //id=1 表示当前商户为DIDAOif (objMarchant == null){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到当前商户:MarchantID=1" });return;}TD_MARCHANT curriMarchant = objMarchant as TD_MARCHANT;#endregion#region 获得当前支付第三方信息(约定的秘钥)object objEbank = new MyORM_BLL().SelectModelById(typeof(TD_MARCHANT), 1, 3); //id=3 表示当前商户为银联if (objEbank == null){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到当前支付第三方信息:MarchantID=3" });return;}TD_MARCHANT ebank = objEbank as TD_MARCHANT;#endregion//设置传入参数(通过 获得课程信息/商户信息/第三方信息即秘钥)TD_Ebankcome ebc = new TD_Ebankcome();#region 实例化 ebcebc.style = "0";ebc.v_amount = course.PRICE.ToString();ebc.v_mid = curriMarchant.NUM;ebc.v_moneytype = "0";ebc.v_oid = Guid.NewGuid().ToString();ebc.v_url = curriMarchant.URL + "Course/CourseController.ashx?action=ebankresult";ebc.v_md5info = CommonHelper.Md5EncodeByUTF8(ebc.v_amount + ebc.v_moneytype + ebc.v_oid + ebc.v_mid + ebank.PASSWORD).ToLower();#endregion//插入订单表TD_ORDER(未支付)#region 获得当前用户IDlong? carrid = LoginHelper.GetSessionID(context);if (carrid == null){context.Response.Redirect("/Login/LoginController.ashx?action=index");return;}long currid = Convert.ToInt64(carrid);#endregionTD_ORDER order = new TD_ORDER();#region 实例化 orderorder.COURSEID = courseid;order.CREATEDATE = DateTime.Now;order.MARCHANTID = curriMarchant.ID;order.ORDERNUM = ebc.v_oid;order.PAYMETHOD = "Y";order.PAYSTATUS = "W";order.USERID = currid;#endregionbool flag = new MyORM_BLL().InsertModel(order, "SE_TD_ORDER");//调用接口传入所需参数context.Response.Redirect("/ChinaBank/PayGate.ashx?v_mid=" + ebc.v_mid+ "&v_oid=" + ebc.v_oid+ "&v_amount=" + ebc.v_amount+ "&v_moneytype=" + ebc.v_moneytype+ "&v_url=" + ebc.v_url+ "&v_md5info=" + ebc.v_md5info+ "&style=" + ebc.style);#endregion}public void ebankresult(HttpContext context){#region 银联支付 回传结果#region 逻辑//5 获得接口回调的参数//6 计算sign//7 判断回传sign和计算的sign是否相等 //8 如果相等,更新TD_ORDER状态和插入TD_USERCOURSE//9 调转到该课程所在的章节列表 #endregion//获得接口回调的参数 验证TD_EbankResult ebr = new TD_EbankResult();#region 实例化 ebrebr.v_oid = context.Request["v_oid"];ebr.v_pmode = context.Request["v_pmode"];ebr.v_pstatus = context.Request["v_pstatus"];ebr.v_amount = context.Request["v_amount"];ebr.v_moneytype = context.Request["v_moneytype"];ebr.v_md5str = context.Request["v_md5str"];#endregion#region 获得当前支付第三方信息(约定的秘钥)object objEbank = new MyORM_BLL().SelectModelById(typeof(TD_MARCHANT), 1, 3); //id=3 表示第三方银联if (objEbank == null){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到当前支付第三方信息:MarchantID=3" });return;}TD_MARCHANT ebank = objEbank as TD_MARCHANT;#endregion//判断回传sign和计算的sign是否相等 string signinner = CommonHelper.Md5EncodeByUTF8(ebr.v_oid + ebr.v_pstatus + ebr.v_amount + ebr.v_moneytype + ebank.PASSWORD).ToLower();if (string.IsNullOrWhiteSpace(ebr.v_md5str) || signinner != ebr.v_md5str){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "支付返回失败:签名错误" });return;}//如果相等,更新TD_ORDER状态和插入TD_USERCOURSEbool flag = new MyORM_BLL().UpdateFieldByField(typeof(TD_ORDER), "PAYSTATUS='Y'", "ORDERNUM='" + ebr.v_oid + "'");if (!flag){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "支付返回时:更新数据库订单失败" });return;}#region 根君订单号查询订单List<object> list = new MyORM_BLL().SelectModelByField(typeof(TD_ORDER), "ORDERNUM='" + ebr.v_oid + "'");if (list.Count < 1){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "支付返回时:未查询到数据库中订单 ORDERNUM=" + ebr.v_oid });return;}else if (list.Count > 1){RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "支付返回时:数据库异常,查询到重复的订单 ORDERNUM=" + ebr.v_oid });return;}TD_ORDER order = list[0] as TD_ORDER;#endregion#region 获得当前用户IDlong? carrid = LoginHelper.GetSessionID(context);if (carrid == null){context.Response.Redirect("/Login/LoginController.ashx?action=index");return;}long currid = Convert.ToInt64(carrid);#endregionTD_USERCOURSE uc = new TD_USERCOURSE();#region 实例化 ucuc.ACTIVEDATE = DateTime.Now;uc.COURSEID = order.COURSEID;uc.EXPIREDATE = DateTime.Now.AddDays(30);uc.USERID = currid;#endregionbool flagUC = new MyORM_BLL().InsertModel(uc, "SE_TD_USERCOURSE");RazorHelper.RazorParse(context, "~/Course/PayResult.cshtml", new { courseid = order.COURSEID, msg = "银联支付成功,点击查看该课程列表" });#endregion} #endregion

CourseController.ashx posted on -11-06 20:52 AdolphYang 阅读(...) 评论(...) 编辑 收藏

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。