调用支付宝转账接口(单笔)

摘要:
="sign"&&temp.Key.ToLower()!="sign_type"&&temp.Value!=""&&temp.Value!

下面这几个类都是支付宝demo里面的,直接拿过来用就可以

using System.Web;
using System.Text;
using System.IO;
using System.Net;
using System;
using System.Collections.Generic;

namespace Com.Alipay
{
    public class Config
    {
        #region 字段
        private static string partner = "";
        private static string key = "";
        private static string input_charset = "";
        private static string sign_type = "";
        #endregion
        static Config()
        {
            //合作身份者ID,以2088开头由16位纯数字组成的字符串
            partner = "公司的";
            //交易安全检验码,由数字和字母组成的32位字符串
            key = "公司的";
            //字符编码格式 目前支持 gbk 或 utf-8
            input_charset = "utf-8";
            //签名方式,选择项:RSA、DSA、MD5
            sign_type = "MD5";
        }
        #region 属性
        /// <summary>
        /// 获取或设置合作者身份ID
        /// </summary>
        public static string Partner
        {
            get { return partner; }
            set { partner = value; }
        }

        /// <summary>
        /// 获取或设交易安全校验码
        /// </summary>
        public static string Key
        {
            get { return key; }
            set { key = value; }
        }

        /// <summary>
        /// 获取字符编码格式
        /// </summary>
        public static string Input_charset
        {
            get { return input_charset; }
        }

        /// <summary>
        /// 获取签名方式
        /// </summary>
        public static string Sign_type
        {
            get { return sign_type; }
        }
        #endregion
    }
}
usingSystem.Web;
usingSystem.Text;
usingSystem.Security.Cryptography;
usingSystem.IO;
usingSystem.Net;
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Xml;

namespaceCom.Alipay
{
    public classCore
    {

        publicCore()
        {
        }

        /// <summary>
        ///除去数组中的空值和签名参数并以字母a到z的顺序排序
        /// </summary>
        /// <param name="dicArrayPre">过滤前的参数组</param>
        /// <returns>过滤后的参数组</returns>
        public static Dictionary<string, string> FilterPara(SortedDictionary<string, string>dicArrayPre)
        {
            Dictionary<string, string> dicArray = new Dictionary<string, string>();
            foreach (KeyValuePair<string, string> temp indicArrayPre)
            {
                if (temp.Key.ToLower() != "sign" && temp.Key.ToLower() != "sign_type" && temp.Value != "" && temp.Value != null)
                {
                    dicArray.Add(temp.Key, temp.Value);
                }
            }
            returndicArray;
        }
        /// <summary>
        ///把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
        /// </summary>
        /// <param name="sArray">需要拼接的数组</param>
        /// <returns>拼接完成以后的字符串</returns>
        public static string CreateLinkString(Dictionary<string, string>dicArray)
        {
            StringBuilder prestr = newStringBuilder();
            foreach (KeyValuePair<string, string> temp indicArray)
            {
                prestr.Append(temp.Key + "=" + temp.Value + "&");
            }

            //去掉最後一個&字符
            int nLen =prestr.Length;
            prestr.Remove(nLen-1,1);

            returnprestr.ToString();
        }
        /// <summary>
        ///把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对参数值做urlencode
        /// </summary>
        /// <param name="sArray">需要拼接的数组</param>
        /// <param name="code">字符编码</param>
        /// <returns>拼接完成以后的字符串</returns>
        public static string CreateLinkStringUrlencode(Dictionary<string, string>dicArray, Encoding code)
        {
            StringBuilder prestr = newStringBuilder();
            foreach (KeyValuePair<string, string> temp indicArray)
            {
                prestr.Append(temp.Key + "=" + HttpUtility.UrlEncode(temp.Value, code) + "&");
            }

            //去掉最後一個&字符
            int nLen =prestr.Length;
            prestr.Remove(nLen - 1, 1);

            returnprestr.ToString();
        }
        /// <summary>
        ///写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
        /// </summary>
        /// <param name="sWord">要写入日志里的文本内容</param>
        public static void LogResult(stringsWord)
        {
            string strPath = HttpContext.Current.Server.MapPath("log");
            strPath = strPath + "\" + DateTime.Now.ToString().Replace(":", "") + ".txt";
            StreamWriter fs = new StreamWriter(strPath, false, System.Text.Encoding.Default);
            fs.Write(sWord);
            fs.Close();
        }
        /// <summary>
        ///获取文件的md5摘要
        /// </summary>
        /// <param name="sFile">文件流</param>
        /// <returns>MD5摘要结果</returns>
        public static stringGetAbstractToMD5(Stream sFile)
        {
            MD5 md5 = newMD5CryptoServiceProvider();
            byte[] result =md5.ComputeHash(sFile);
            StringBuilder sb = new StringBuilder(32);
            for (int i = 0; i < result.Length; i++)
            {
                sb.Append(result[i].ToString("x").PadLeft(2, '0'));
            }
            returnsb.ToString();
        }
        /// <summary>
        ///获取文件的md5摘要
        /// </summary>
        /// <param name="dataFile">文件流</param>
        /// <returns>MD5摘要结果</returns>
        public static string GetAbstractToMD5(byte[] dataFile)
        {
            MD5 md5 = newMD5CryptoServiceProvider();
            byte[] result =md5.ComputeHash(dataFile);
            StringBuilder sb = new StringBuilder(32);
            for (int i = 0; i < result.Length; i++)
            {
                sb.Append(result[i].ToString("x").PadLeft(2, '0'));
            }
            returnsb.ToString();
        }
    }
}
usingSystem.Web;
usingSystem.Text;
usingSystem.IO;
usingSystem.Net;
usingSystem;
usingSystem.Collections.Generic;

namespaceCom.Alipay
{
    public classNotify
    {
        #region 字段
        private string _partner = "";               //合作身份者ID
        private string _key = "";                   //商户的私钥
        private string _input_charset = "";         //编码格式
        private string _sign_type = "";             //签名方式

        //支付宝消息验证地址
        private string Https_veryfy_url = "https://mapi.alipay.com/gateway.do?service=notify_verify&";
        #endregion
        /// <summary>
        ///构造函数
        ///从配置文件中初始化变量
        /// </summary>
        /// <param name="inputPara">通知返回参数数组</param>
        /// <param name="notify_id">通知验证ID</param>
        publicNotify()
        {
            //初始化基础配置信息
            _partner =Config.Partner.Trim();
            _key =Config.Key.Trim();
            _input_charset =Config.Input_charset.Trim().ToLower();
            _sign_type =Config.Sign_type.Trim().ToUpper();
        }
        /// <summary>
        ///验证消息是否是支付宝发出的合法消息
        /// </summary>
        /// <param name="inputPara">通知返回参数数组</param>
        /// <param name="notify_id">通知验证ID</param>
        /// <param name="sign">支付宝生成的签名结果</param>
        /// <returns>验证结果</returns>
        public bool Verify(SortedDictionary<string, string> inputPara, string notify_id, stringsign)
        {
            //获取返回时的签名验证结果
            bool isSign =GetSignVeryfy(inputPara, sign);
            //获取是否是支付宝服务器发来的请求的验证结果
            string responseTxt = "false";
            if (notify_id != null && notify_id != "") { responseTxt =GetResponseTxt(notify_id); }

            //写日志记录(若要调试,请取消下面两行注释)
            //string sWord = "responseTxt=" + responseTxt + "
 isSign=" + isSign.ToString() + "
 返回回来的参数:" + GetPreSignStr(inputPara) + "
 ";
            //Core.LogResult(sWord);

            //判断responsetTxt是否为true,isSign是否为true
            //responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关
            //isSign不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关
            if (responseTxt == "true" && isSign)//验证成功
{
                return true;
            }
            else//验证失败
{
                return false;
            }
        }
        /// <summary>
        ///获取待签名字符串(调试用)
        /// </summary>
        /// <param name="inputPara">通知返回参数数组</param>
        /// <returns>待签名字符串</returns>
        private string GetPreSignStr(SortedDictionary<string, string>inputPara)
        {
            Dictionary<string, string> sPara = new Dictionary<string, string>();
            //过滤空值、sign与sign_type参数
            sPara =Core.FilterPara(inputPara);
            //获取待签名字符串
            string preSignStr =Core.CreateLinkString(sPara);
            returnpreSignStr;
        }
        /// <summary>
        ///获取返回时的签名验证结果
        /// </summary>
        /// <param name="inputPara">通知返回参数数组</param>
        /// <param name="sign">对比的签名结果</param>
        /// <returns>签名验证结果</returns>
        private bool GetSignVeryfy(SortedDictionary<string, string> inputPara, stringsign)
        {
            Dictionary<string, string> sPara = new Dictionary<string, string>();
            //过滤空值、sign与sign_type参数
            sPara =Core.FilterPara(inputPara);
            //获取待签名字符串
            string preSignStr =Core.CreateLinkString(sPara);
            //获得签名验证结果
            bool isSgin = false;
            if (sign != null && sign != "")
            {
                switch(_sign_type)
                {
                    case "MD5":
                        isSgin =AlipayMD5.Verify(preSignStr, sign, _key, _input_charset);
                        break;
                    default:
                        break;
                }
            }

            returnisSgin;
        }
        /// <summary>
        ///获取是否是支付宝服务器发来的请求的验证结果
        /// </summary>
        /// <param name="notify_id">通知验证ID</param>
        /// <returns>验证结果</returns>
        private string GetResponseTxt(stringnotify_id)
        {
            string veryfy_url = Https_veryfy_url + "partner=" + _partner + "&notify_id=" +notify_id;

            //获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求
            string responseTxt = Get_Http(veryfy_url, 120000);

            returnresponseTxt;
        }
        /// <summary>
        ///获取远程服务器ATN结果
        /// </summary>
        /// <param name="strUrl">指定URL路径地址</param>
        /// <param name="timeout">超时时间设置</param>
        /// <returns>服务器ATN结果</returns>
        private string Get_Http(string strUrl, inttimeout)
        {
            stringstrResult;
            try{
                HttpWebRequest myReq =(HttpWebRequest)HttpWebRequest.Create(strUrl);
                myReq.Timeout =timeout;
                HttpWebResponse HttpWResp =(HttpWebResponse)myReq.GetResponse();
                Stream myStream =HttpWResp.GetResponseStream();
                StreamReader sr = newStreamReader(myStream, Encoding.Default);
                StringBuilder strBuilder = newStringBuilder();
                while (-1 !=sr.Peek())
                {
                    strBuilder.Append(sr.ReadLine());
                }

                strResult =strBuilder.ToString();
            }
            catch(Exception exp)
            {
                strResult = "错误:" +exp.Message;
            }

            returnstrResult;
        }
    }
}
usingSystem.Web;
usingSystem.Text;
usingSystem.IO;
usingSystem.Net;
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Xml;

namespaceCom.Alipay
{
    public classSubmit
    {
        #region 字段
        //支付宝网关地址(新)
        private static string GATEWAY_NEW = "https://mapi.alipay.com/gateway.do?";
        //商户的私钥
        private static string _key = "";
        //编码格式
        private static string _input_charset = "";
        //签名方式
        private static string _sign_type = "";
        #endregion

        staticSubmit()
        {
            _key =Config.Key.Trim();
            _input_charset =Config.Input_charset.Trim().ToLower();
            _sign_type =Config.Sign_type.Trim().ToUpper();
        }

        /// <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;
            }

            returnmysign;
        }

        /// <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);

            returnsPara;
        }

        /// <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);

            returnstrRequestData;
        }

        /// <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, stringstrButtonValue)
        {
            //待请求参数数组
            Dictionary<string, string> dicPara = new Dictionary<string, string>();
            dicPara =BuildRequestPara(sParaTemp);

            StringBuilder sbHtml = newStringBuilder();

            sbHtml.Append("<form   name='alipaysubmit' action='" + GATEWAY_NEW + "_input_charset=" + _input_charset + "' method='" + strMethod.ToLower().Trim() + "'>");

            foreach (KeyValuePair<string, string> temp indicPara)
            {
                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>");

            returnsbHtml.ToString();
        }
        /// <summary>
        ///建立请求,以模拟远程HTTP的POST请求方式构造并获取支付宝的处理结果
        /// </summary>
        /// <param name="sParaTemp">请求参数数组</param>
        /// <returns>支付宝处理结果</returns>
        public static string BuildRequest(SortedDictionary<string, string>sParaTemp)
        {
            Encoding code =Encoding.GetEncoding(_input_charset);

            //待请求参数数组字符串
            string strRequestData =BuildRequestParaToString(sParaTemp,code);

            //把数组转换成流中所需字节数组类型
            byte[] bytesRequestData =code.GetBytes(strRequestData);

            //构造请求地址
            string strUrl = GATEWAY_NEW + "_input_charset=" +_input_charset;

            //请求远程HTTP
            string strResult = "";
            try{
                //设置HttpWebRequest基本信息
                HttpWebRequest myReq =(HttpWebRequest)HttpWebRequest.Create(strUrl);
                myReq.Method = "post";
                myReq.ContentType = "application/x-www-form-urlencoded";

                //填充POST数据
                myReq.ContentLength =bytesRequestData.Length;
                Stream requestStream =myReq.GetRequestStream();
                requestStream.Write(bytesRequestData, 0, bytesRequestData.Length);
                requestStream.Close();

                //发送POST数据请求服务器
                HttpWebResponse HttpWResp =(HttpWebResponse)myReq.GetResponse();
                Stream myStream =HttpWResp.GetResponseStream();

                //获取服务器返回信息
                StreamReader reader = newStreamReader(myStream, code);
                StringBuilder responseData = newStringBuilder();
                String line;
                while ((line = reader.ReadLine()) != null)
                {
                    responseData.Append(line);
                }

                //释放
myStream.Close();

                strResult =responseData.ToString();
            }
            catch(Exception exp)
            {
                strResult = "报错:"+exp.Message;
            }

            returnstrResult;
        }
        /// <summary>
        ///建立请求,以模拟远程HTTP的POST请求方式构造并获取支付宝的处理结果,带文件上传功能
        /// </summary>
        /// <param name="sParaTemp">请求参数数组</param>
        /// <param name="strMethod">提交方式。两个值可选:post、get</param>
        /// <param name="fileName">文件绝对路径</param>
        /// <param name="data">文件数据</param>
        /// <param name="contentType">文件内容类型</param>
        /// <param name="lengthFile">文件长度</param>
        /// <returns>支付宝处理结果</returns>
        public static string BuildRequest(SortedDictionary<string, string> sParaTemp, string strMethod, string fileName, byte[] data, string contentType, intlengthFile)
        {

            //待请求参数数组
            Dictionary<string, string> dicPara = new Dictionary<string, string>();
            dicPara =BuildRequestPara(sParaTemp);

            //构造请求地址
            string strUrl = GATEWAY_NEW + "_input_charset=" +_input_charset;

            //设置HttpWebRequest基本信息
            HttpWebRequest request =(HttpWebRequest)HttpWebRequest.Create(strUrl);
            //设置请求方式:get、post
            request.Method =strMethod;
            //设置boundaryValue
            string boundaryValue = DateTime.Now.Ticks.ToString("x");
            string boundary = "--" +boundaryValue;
            request.ContentType = "
multipart/form-data; boundary=" +boundaryValue;
            //设置KeepAlive
            request.KeepAlive = true;
            //设置请求数据,拼接成字符串
            StringBuilder sbHtml = newStringBuilder();
            foreach (KeyValuePair<string, string> key indicPara)
            {
                sbHtml.Append(boundary + "
Content-Disposition: form-data; name="" + key.Key + ""
" + key.Value + "
");
            }
            sbHtml.Append(boundary + "
Content-Disposition: form-data; name="withhold_file"; filename="");
            sbHtml.Append(fileName);
            sbHtml.Append(""
Content-Type: " + contentType + "
");
            string postHeader =sbHtml.ToString();
            //将请求数据字符串类型根据编码格式转换成字节流
            Encoding code =Encoding.GetEncoding(_input_charset);
            byte[] postHeaderBytes =code.GetBytes(postHeader);
            byte[] boundayBytes = Encoding.ASCII.GetBytes("
" + boundary + "--
");
            //设置长度
            long length = postHeaderBytes.Length + lengthFile +boundayBytes.Length;
            request.ContentLength =length;

            //请求远程HTTP
            Stream requestStream =request.GetRequestStream();
            Stream myStream;
            try{
                //发送数据请求服务器
                requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
                requestStream.Write(data, 0, lengthFile);
                requestStream.Write(boundayBytes, 0, boundayBytes.Length);
                HttpWebResponse HttpWResp =(HttpWebResponse)request.GetResponse();
                myStream =HttpWResp.GetResponseStream();
            }
            catch(WebException e)
            {
                returne.ToString();
            }
            finally{
                if (requestStream != null)
                {
                    requestStream.Close();
                }
            }

            //读取支付宝返回处理结果
            StreamReader reader = newStreamReader(myStream, code);
            StringBuilder responseData = newStringBuilder();

            String line;
            while ((line = reader.ReadLine()) != null)
            {
                responseData.Append(line);
            }
            myStream.Close();
            returnresponseData.ToString();
        }
        /// <summary>
        ///用于防钓鱼,调用接口query_timestamp来获取时间戳的处理函数
        ///注意:远程解析XML出错,与IIS服务器配置有关
        /// </summary>
        /// <returns>时间戳字符串</returns>
        public static stringQuery_timestamp()
        {
            string url = GATEWAY_NEW + "service=query_timestamp&partner=" + Config.Partner + "&_input_charset=" +Config.Input_charset;
            string encrypt_key = "";

            XmlTextReader Reader = newXmlTextReader(url);
            XmlDocument xmlDoc = newXmlDocument();
            xmlDoc.Load(Reader);

            encrypt_key = xmlDoc.SelectSingleNode("/alipay/response/timestamp/encrypt_key").InnerText;

            returnencrypt_key;
        }
    }
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.IO;
usingSystem.Security.Cryptography;

namespaceCom.Alipay
{
    /// <summary>
    ///类名:MD5
    ///功能:MD5加密
    /// </summary>
    public sealed classAlipayMD5
    {
        publicAlipayMD5()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
}

        /// <summary>
        ///签名字符串
        /// </summary>
        /// <param name="prestr">需要签名的字符串</param>
        /// <param name="key">密钥</param>
        /// <param name="_input_charset">编码格式</param>
        /// <returns>签名结果</returns>
        public static string Sign(string prestr, string key, string_input_charset)
        {
            StringBuilder sb = new StringBuilder(32);

            prestr = prestr +key;

            MD5 md5 = newMD5CryptoServiceProvider();
            byte[] t =md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(prestr));
            for (int i = 0; i < t.Length; i++)
            {
                sb.Append(t[i].ToString("x").PadLeft(2, '0'));
            }

            returnsb.ToString();
        }
        /// <summary>
        ///验证签名
        /// </summary>
        /// <param name="prestr">需要签名的字符串</param>
        /// <param name="sign">签名结果</param>
        /// <param name="key">密钥</param>
        /// <param name="_input_charset">编码格式</param>
        /// <returns>验证结果</returns>
        public static bool Verify(string prestr, string sign, string key, string_input_charset)
        {
            string mysign =Sign(prestr, key, _input_charset);
            if (mysign ==sign)
            {
                return true;
            }
            else{
                return false;
            }
        }
    }
}

下面这个就是webapi里面的处理(简单处理)

usingSystem.Collections.Generic;
usingSystem.Web.Http;
usingSystem;
usingCom.Alipay;
usingNpgsql;
usingAlipayFrist.DBUtilty;
usingSystem.Data;
//using System.ComponentModel.DataAnnotations;
usingSystem.Xml;
usingSystem.IO;
usingSystem.Xml.Linq;
usingAlipayFrist.Models;
usingSystem.Linq;

namespaceAlipayFrist.Controllers
{
    /// <summary>
    ///B2C单笔转账到账户的接口
    /// </summary>
    public classMyFristAlipayController : ApiController
    {
        //转账接口
        public objectPost(alipay Alipay)
        {
            try{
                var sParaTemp = new SortedDictionary<string, string>();
                sParaTemp.Add("sign_type", Config.Sign_type);//签名方式
                sParaTemp.Add("service", "alipay.fund.trans.toacc");//接口名称
                sParaTemp.Add("partner", Config.Partner);//合作者身份ID 
                sParaTemp.Add("out_biz_no", DateTime.Now.Ticks.ToString());//商户转账唯一订单号 
                sParaTemp.Add("payer_type", "ALIPAY_USERID");//付款方账户类型
                sParaTemp.Add("payer_account", Config.Partner);//付款方账户
                sParaTemp.Add("payer_name", "");//付款方真实姓名
                sParaTemp.Add("payee_type", "ALIPAY_LOGONID");//收款方账户类型
                sParaTemp.Add("payee_account", Alipay.payee_account);//收款方账户 
                sParaTemp.Add("payee_ real_name", Alipay.payee_name);//收款方真实姓名
                sParaTemp.Add("_input_charset", Config.Input_charset.ToLower());//编码
                sParaTemp.Add("amount", Alipay.amount.ToString());//转账金额 
                sParaTemp.Add("memo", Alipay.memo);//转账备注 
                //建立请求  
                var aa =Submit.BuildRequest(sParaTemp);
                try{
                    var xmldoc = newXmlDocument();
                    xmldoc.LoadXml(aa);
                    //xmldoc.Load(new System.IO.MemoryStream(System.Text.Encoding.GetEncoding("utf-8").GetBytes(aa)));//获取xml文件
                    var Nodes = xmldoc.SelectSingleNode("alipay");
                    var is_successNode = Nodes.SelectSingleNode("is_success");
                    var is_success = is_successNode.InnerXml;//is_success 的值
                    var paramNodes = Nodes.SelectSingleNode("request").ChildNodes;//所有的param节点
                    var sign = "";
                    for (int i = 0; i < paramNodes.Count; i++)
                    {
                        //判断是name是否为sign
                        if (paramNodes[i].Attributes["name"].Value == "sign")
                        {
                            sign =paramNodes[i].InnerXml;
                        }
                    }
                    var result_code = Nodes.SelectSingleNode("response").SelectSingleNode("alipay").SelectSingleNode("result_code").InnerXml;
                    var sign_type = Nodes.SelectSingleNode("sign_type").InnerXml;
                    if (is_success == "T")
                    {
                        var dbhelper = newPostgreHelper();
                        var sql = @"INSERT INTO alipay(out_biz_no,payer_type,payer_account,payer_name,payee_type,payee_account,payee_name,amount,memo,CreateDate,TypeResult_code) VALUES(@out_biz_no,@payer_type,@payer_account,@payer_name,@payee_type,@payee_account,@payee_name,@amount,@memo,@CreateDate,@TypeResult_code)";
                        var para = new[]{
                            new NpgsqlParameter("@out_biz_no",DateTime.Now.Ticks.ToString()),
                            new NpgsqlParameter("@payer_type","ALIPAY_USERID"),
                            new NpgsqlParameter("@payer_account",Config.Partner),
                            new NpgsqlParameter("@payer_name",""),
                            new NpgsqlParameter("@payee_type","ALIPAY_LOGONID"),
                            new NpgsqlParameter("@payee_account",Alipay.payee_account),
                            new NpgsqlParameter("@payee_name",Alipay.payee_name),
                            new NpgsqlParameter("@amount",decimal.Parse(Alipay.amount.ToString())),
                            new NpgsqlParameter("@memo",Alipay.memo.ToString()),
                            new NpgsqlParameter("@CreateDate",DateTime.Now.ToString()),
                            new NpgsqlParameter("@TypeResult_code",result_code.ToString())
                         };
                        dbhelper.ExecuteNonQuery(ConnectionString.DB, CommandType.Text, sql, para);
                    }
                }
                catch(Exception)
                {
                    throw;
                }
                return new { Result = true, Message = "转账成功!"};
            }
            catch(Exception)
            {
                return new { Result = false, Message = "转账失败!"};
            }
        }
       

}

前台页面调用

@{
    ViewBag.Title = "Frist";
}

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link href="~/Content/bootstrap.min.css" rel="stylesheet" />
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
</head>
<body>

    <form id="form1" action="/Api/MyFristAlipay" method="post">

        <div class="form-group">
            <label for="name">付款人支付宝账号:</label>
            <input type="text" class="form-control" disabled="disabled" value="123456789">
        </div>
        <div class="form-group">
            <label for="name">付款人姓名:</label>
            <input type="text" class="form-control" disabled="disabled" value="" name="CompanyName" id="CompanyName" />
        </div>
        <div class="form-group">
            <label for="name">收款人支付宝账号:</label>
            <input type="text" name="payee_account" id="PayeeAlipayNumber" class="form-control" />
        </div>
        <div class="form-group">
            <label for="name">收款人姓名:</label>
            <input type="text" class="form-control" name="payee_name" id="PayeeAlipayName">
        </div>
        <div class="form-group">
            <label for="name">支付金额:</label>
            <input type="text" class="form-control" name="amount" id="AlipayNameAmount">
        </div>
        <div class="form-group">
            <label for="name">备注:</label>
            <input type="text" class="form-control" name="memo" id="Remark">
        </div>
        <div>@*<button type="submit" class="btn btn-primary" data-button="alipay_submit">提  交
                </button>*@
            <button type="button" class="btn btn-primary" data-button="alipay_submit" onclick="test()">提  交
            </button>
        </div>
    </form>
    <div id="test_div">
    </div>
</body>
</html>
<script type="text/javascript">function test() {
        debugger;
        $.post($('#form1').attr("action"), $('#form1').serialize(), function (dt) {
           //$("#test_div").html(dt);
            if(dt.Result) {
                alert(dt.Message);
                window.location.href = "Home/Index";
            }
            else{
                alert(dt.Message);
            }
        })
    }
    //$(document).ready(function () {
    //$(document).on("click", "[data-button=alipay_submit]", function () {
    //debugger;
    //var Alipay = {};
    //Alipay.payee_account = $("#PayeeAlipayNumber").val();//收款人支付宝账号
    //Alipay.payee_real_name = $("#PayeeAlipayName").val();//收款人姓名
    //Alipay.memo = $("#Remark").val();//备注
    //Alipay.amount = $("#AlipayNameAmount").val();//支付金额
    //$.post("Api/MyFristAlipay", Alipay, function (data) {
    //if (data)
    //{
    //alert("转账成功");
    //}
    //})
    //        //$.ajax({
    //        //type: "get",
    //        //url: "Api/MyFristAlipay",
    //        //data: Alipay,
    //        //success: function (data) {
    //        //if (data) {
    //        //alert('转账成功');
    //        //}
    //        //},
    //        //error: function () {
    //        //alert('转账失败');
    //        //}
    //        //})
    //})
    //})
</script>

免责声明:文章转载自《调用支付宝转账接口(单笔)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DBGrid支持鼠标滚轮滚动的解决办法在IDEA中使用Spring写一个HelloWorld下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

实践Kong for Kubernetes(K8S),kong最新2.1版本和kong-ingress-controller:0.9.1版本

先决条件 Kubernetes集群:您可以使用Minikube或GKE集群。Kong与Kubernetes的所有发行版兼容。 kubectl访问权限:您应该已经kubectl安装并配置为与Kubernetes集群通信。 为Kubernetes安装Kong 使用以下安装方法之一安装Kong for Kubernetes: YAML清单 helm K...

es-09-spark集成

es和spark的集成比较简单, 直接使用内部封装的一些方法即可 版本设置说明: https://www.elastic.co/guide/en/elasticsearch/hadoop/current/requirements.html maven依赖说明: https://www.elastic.co/guide/en/elasticsearch/ha...

0x01 译文:Windows桌面应用Win32开发简介

本节课将简单介绍下使用C++开发Windows桌面应用的一些基础知识  目录: 准备你的开发环境 Windows 代码规范 操作字符串 什么是一个Window? WinMain:程序的入口点 1. 准备你的开发环境 安装 Windows SDK        要用C或者C++开发Windows 程序,你必须安装 Microsoft Windows So...

vue 格式化银行卡(信用卡)每4位一个符号隔断

问题 在做银行卡输入框时有一个需求如题,这里举例用-隔断 调查 查看了很多大公司网站的银行卡输入,发现还有有很多缺陷的: 有的是在中间删除,光标会跳到最后; 有的是能删除掉中间隔断符的; 等等,逻辑感觉比较混乱,或者是我不懂他们的高深设计吧。 只有支付宝的设计感觉是比较合理的,改变了只有输入框的固有方案,放图: 上面出现的显示框不可修改,能清晰看出四位隔断...

Linux之防火墙配置

Centos 7 firewall : 1、firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld  开机禁用  : systemctl disable firewalld 开机启用  : sys...

node中的url和path模块

//path模块 1.Node.js path 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方式引入该模块: var path = require("path") 2.常用方法 ================path.join([...paths]) path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并...