码迷,mamicode.com
首页 > 其他好文 > 详细

支付宝个人账户转账

时间:2015-03-31 12:15:41      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Text;
using System.Configuration;
using istrong.db;
using xyxx_base.Common;
using xyxx.Common;
using xyxx_base.Models;
using MongoDB.Bson;

namespace xyxx.Controllers
{
    public class AlipayController : Controller
    {
        protected readonly DbHelper db = DbHelperFactory.GetDbHelper();
        //支付宝网关地址(新)
        private static string GATEWAY_NEW = "https://mapi.alipay.com/gateway.do?";

        //商户id
        private static string _partner = ConfigurationManager.AppSettings["partner"];

        //商户的私钥
        private static string _key = ConfigurationManager.AppSettings["key"];

        //编码格式
        private static string _input_charset = "utf-8";

        //签名方式
        private static string _sign_type = "MD5";

        //支付类型 必填,不能修改
        private static string payment_type = "1";

        //服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数
        private static string notify_url = ConfigurationManager.AppSettings["notifyUrl"];

        
        private static string return_url = ""; 
//目前只支持一种类型:10(卖家给第三方提成)。当传递了参数royalty_parameters时,提成类型参数不能为空。 private static string royalty_type = "10"; public ActionResult Pay() { //卖家支付宝帐户 必填 string seller_email = "**************"; //商户订单号 必填 string out_trade_no = DateTime.Now.Ticks.ToString(); //订单名称 必填 string subject = "*****************"; //付款金额 必填 string total_fee = this.GetStringParameter("money", "0.01"); //订单描述 string body = "**********************"; //商品展示地址 需以http://开头的完整路径,例如:http://www.xxx.com/myorder.html string show_url = ""; //防钓鱼时间戳 若要使用请调用类文件submit中的query_timestamp函数 string anti_phishing_key = ""; //客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1 string exter_invoke_ip = ""; //创建充值记录 var loginUser = SessionHelper.GetLoginUser(); var rechargeModel = new RechargeModel() { CreatorId = loginUser.UserId, Creator = loginUser.UserName, EnterpriseId = loginUser.UnitId, EnterpriseName = loginUser.UnitName, Remark = "支付宝充值", Data = new Dictionary<string, object>(), OrderId = "", Deleted = true, }; var rechargeEditModel = new RechargeEditModel() { Id = rechargeModel.Id, CreatorId = rechargeModel.CreatorId, Creator = rechargeModel.Creator, CreateTime = DateTime.MinValue, Attached = null, Deleted = false, }; rechargeModel.Edit = rechargeEditModel; rechargeModel.EditList.Add(rechargeEditModel); rechargeModel.Audit.Money = decimal.Parse(total_fee); rechargeModel.Audit.CreateTime = DateTime.MinValue; db.Insert(rechargeModel); var extra_common_param = rechargeModel.Id.ToString(); //把请求参数打包成数组 SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>(); sParaTemp.Add("partner", _partner); sParaTemp.Add("_input_charset", _input_charset); sParaTemp.Add("service", "create_direct_pay_by_user"); sParaTemp.Add("payment_type", payment_type); sParaTemp.Add("notify_url", notify_url); sParaTemp.Add("return_url", return_url); sParaTemp.Add("seller_email", seller_email); sParaTemp.Add("out_trade_no", out_trade_no); sParaTemp.Add("subject", subject); sParaTemp.Add("total_fee", total_fee); sParaTemp.Add("body", body); //sParaTemp.Add("show_url", "ss"); //sParaTemp.Add("anti_phishing_key", "ss"); //sParaTemp.Add("exter_invoke_ip", "ss"); //sParaTemp.Add("it_b_pay", "3m"); //sParaTemp.Add("royalty_type", royalty_type);//2014-04-10注释 //sParaTemp.Add("royalty_parameters", royalty_parameters); sParaTemp.Add("extra_common_param", extra_common_param); //建立请求 string sHtmlText = BuildRequest(sParaTemp, "post", "确认"); return Content(sHtmlText); } /// <summary> /// 建立请求,以表单HTML形式构造(默认) /// </summary> /// <param name="sParaTemp">请求参数数组</param> /// <param name="strMethod">提交方式。两个值可选:post、get</param> /// <param name="strButtonValue">确认按钮显示文字</param> /// <returns>提交表单HTML文本</returns> public static string BuildRequest(SortedDictionary<string, string> sParaTemp, string strMethod, string strButtonValue) { //待请求参数数组 Dictionary<string, string> dicPara = new Dictionary<string, string>(); dicPara = BuildRequestPara(sParaTemp); StringBuilder sbHtml = new StringBuilder(); sbHtml.Append("<form id=‘alipaysubmit‘ name=‘alipaysubmit‘ action=‘" + GATEWAY_NEW + "_input_charset=" + _input_charset + "‘ method=‘" + strMethod.ToLower().Trim() + "‘>"); foreach (KeyValuePair<string, string> temp in dicPara) { sbHtml.Append("<input type=‘hidden‘ name=‘" + temp.Key + "‘ value=‘" + temp.Value + "‘/>"); } //submit按钮控件请不要含有name属性 sbHtml.Append("<input type=‘submit‘ value=‘" + strButtonValue + "‘ style=‘display:none;‘></form>"); sbHtml.Append("<script>document.forms[‘alipaysubmit‘].submit();</script>"); return sbHtml.ToString(); } /// <summary> /// 生成要请求给支付宝的参数数组 /// </summary> /// <param name="sParaTemp">请求前的参数数组</param> /// <param name="code">字符编码</param> /// <returns>要请求的参数数组字符串</returns> private static string BuildRequestParaToString(SortedDictionary<string, string> sParaTemp, Encoding code) { //待签名请求参数数组 Dictionary<string, string> sPara = new Dictionary<string, string>(); sPara = BuildRequestPara(sParaTemp); //把参数组中所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对参数值做urlencode string strRequestData = Core.CreateLinkStringUrlencode(sPara, code); return strRequestData; } /// <summary> /// 生成要请求给支付宝的参数数组 /// </summary> /// <param name="sParaTemp">请求前的参数数组</param> /// <returns>要请求的参数数组</returns> private static Dictionary<string, string> BuildRequestPara(SortedDictionary<string, string> sParaTemp) { //待签名请求参数数组 Dictionary<string, string> sPara = new Dictionary<string, string>(); //签名结果 string mysign = ""; //过滤签名参数数组 sPara = Core.FilterPara(sParaTemp); //获得签名结果 mysign = BuildRequestMysign(sPara); //签名结果与签名方式加入请求提交参数组中 sPara.Add("sign", mysign); sPara.Add("sign_type", _sign_type); return sPara; } /// <summary> /// 生成请求时的签名 /// </summary> /// <param name="sPara">请求给支付宝的参数数组</param> /// <returns>签名结果</returns> private static string BuildRequestMysign(Dictionary<string, string> sPara) { //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 string prestr = Core.CreateLinkString(sPara); //把最终的字符串签名,获得签名结果 string mysign = ""; switch (_sign_type) { case "MD5": mysign = AlipayMD5.Sign(prestr, _key, _input_charset); break; default: mysign = ""; break; } return mysign; } /// <summary> /// 同步回调地址 /// </summary> /// <returns></returns> public ActionResult returnUrl() { return Content("充值成功"); } /// <summary> /// 异步回调地址 /// </summary> /// <returns></returns> public ActionResult notifyUrl() { var data = WebClientHelper.GetData(Request); var is_success = data.GetStringValue("is_success"); var trade_status = data.GetStringValue("trade_status"); var money = data.GetStringValue("total_fee"); if (trade_status == "TRADE_SUCCESS") { var extra_common_param = data.GetStringValue("extra_common_param"); var rechargeModel = db.FindOneByIdAs<RechargeModel>(ObjectId.Parse(extra_common_param)); rechargeModel.OrderId = data.GetStringValue("trade_no"); rechargeModel.Data = data; if (rechargeModel.Deleted) { rechargeModel.Deleted = false; db.Save(rechargeModel); UserEnterpriseHelper.ChangeEnterpriseMoney(EnumTradeType.充值, double.Parse(money), 0, 0, 0, rechargeModel.EnterpriseId, null, "企业充值", db); } return Content("success"); } return null; } } }

 

支付宝个人账户转账

标签:

原文地址:http://www.cnblogs.com/ysf123/p/4380294.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!