精华内容
下载资源
问答
  • php支付宝转账接口封装,官方sdk有点蛋疼,所以自己封装,适用任何php系统,简单配置即可可用,纯自己开发,请勿转载,转正请标示来源地址,谢谢。
  • 支付宝转账接口

    2015-07-22 20:29:02
    支付宝转账接口,易语言写的。不用申请支付宝或商家营业执照那种,只要个人的支付宝账号就可以。
  • 由于工作需要使用python开发一个自动转账接口,记录一下开发过程。 首先需要在蚂蚁金服上申请开通开发者账户,有了开发者账户就可以使用沙箱进行开发了。 在开发之前我们需要在沙箱应用中填写密钥,密钥的获取可以...
  • 提供支付宝开放平台的单笔转账支付宝账户接口JAVA版本demo 望大家共同进步
  • C# MVC 支付宝商户转账即时到账源码(个人支付宝账号转账接口),个人支付宝账号申请即时到账业务,通过此接口进行转账(个人转账给个人)
  • C#使用alipay.fund.trans.uni.transfer用于向指定支付宝账户转账

    1、登录支付宝开放平台https://openhome.alipay.com

    2、选择“开发服务-研发服务”

    3、配置密钥

    在这里插入图片描述

    3.1 点击“设置”

    在这里插入图片描述

    3.2 使用“支付宝开放平台开发助手”生成密钥(支付宝账号登录)

    在这里插入图片描述

    3.3 点击“生成密钥”

    在这里插入图片描述

    3.4 将生成的2个密钥文件“应用公钥2048”和“应用私钥2048”拷贝保存

    3.5 获取CSR文件,点击“点击获取”按钮

    参考:  [沙箱环境](https://opendocs.alipay.com/open/200/105311)
    

    在这里插入图片描述

    3.6 点击“生成CSR文件”

    在这里插入图片描述

    3.7 点击“上传CSR文件在线生成证书”

    在这里插入图片描述

    3.8 结果会生成三个证书文件

    “appCertPublicKey_*******.crt”,“alipayCertPublicKey_RSA2”,“alipayRootCert”。之后的C#程序中会用到,拷贝保存到项目文件夹中

    4、添加SDK

    .Net Framework开发添加"AlipaySDKNet";

    5、编制支付宝转账接口调用程序

    参考例程网址:https://opensupport.alipay.com/access/integrationList/template/47/346/347/348?ant_source=antsupport
    程序中的"“identity”:"20885","
    此处的“2088
    5”为使用1
    *的支付宝账户创建的沙箱环境中的商户UID,支付账户使用的是k@sohu.com支付宝账户创建的沙箱环境商户。
    全部程序如下:

    using System; 
    using Aop.Api; 
    using Aop.Api.Domain; 
    using Aop.Api.Request; 
    using Aop.Api.Response; 
    
    
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Configuration; 
    using System.IO; 
    // 
    namespace alipay1_csharp 
    { 
       class Program 
       { 
           static void Main(string[] args) 
           { 
               /** **/ 
               String ALIPAY_GATEWAY = "https://openapi.alipaydev.com/gateway.do"; 
    
    
               /** **/ 
               String APP_ID = "2016*********"; 
    
    
               /** **/ 
               String PRIVATE_KEY = "MIIEowIBAAKCAQEAh/........"; 
    
    
               /** **/ 
               CertParams certParams = new CertParams(); 
    
    
               /**  **/ 
               certParams.AppCertPath = "d:\\myalipay\\Cert\\appCertPublicKey_2016*********.crt"; 
    
    
               /** **/ 
               certParams.AlipayPublicCertPath = "d:\\myalipay\\Cert\\alipayCertPublicKey_RSA2.crt"; 
    
    
               /** **/ 
               certParams.RootCertPath = "d:\\myalipay\\Cert\\alipayRootCert.crt"; 
    
    
               /****/ 
               IAopClient client = new DefaultAopClient(ALIPAY_GATEWAY, APP_ID, PRIVATE_KEY, "json", "1.0", "RSA2", "utf-8", "false", certParams); 
    
    
               /** **/ 
               AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); 
    
    
               /** **/ 
               request.BizContent = "{" + 
    
    
                   /** **/ 
                   "\"out_biz_no\":\"2020122000002\"," + 
    
    
                   /**  **/ 
                   "\"trans_amount\":\"10.01\"," + 
    
    
                   /** **/ 
                   "\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," + 
    
    
                   /**  **/ 
                   "\"biz_scene\":\"DIRECT_TRANSFER\"," + 
    
    
                   /** **/ 
                   "\"order_title\":\"\"," + 
                   //"\"original_order_id\":\"20190620110075000006640000063056\"," + 
                   "\"payee_info\":{" + 
    
    
                         /** 2088*********/ 
                         "\"identity\":\"2088*********\"," + 
    
    
                         /**  **/ 
                         "\"identity_type\":\"ALIPAY_USER_ID\"," + 
    
    
                         /** **/ 
                         "\"name\":\"\"" + 
                   "}," + 
    
    
                   /**  **/ 
                   "\"remark\":\"\"," + 
                  // "\"business_params\":\"{\\\"sub_biz_scene\\\":\\\"REDPACKET\\\"}\"" + 
    
    
               "}"; 
               Console.WriteLine(request.BizContent); 
               AlipayFundTransUniTransferResponse response = client.CertificateExecute(request); 
    
    
               /** **/ 
               Console.WriteLine(response.Body);
    
    

    6、转账结果

    在这里插入图片描述

    7、变量替代

    ““out_biz_no”:“2020122000002”,” 中的202012200002如要使用自定义变量替代,如:String BillCode = “202012250003”;则语句变为:"“out_biz_no”:"" + BillCode + “”," 转账金额,收款方ID传参同此。

    展开全文
  • 调用支付宝转账接口(单笔)

    千次阅读 2018-12-20 14:53:15
    下面这几个类都是支付宝demo里面的,直接拿过来用就可以 using System.Web; using System.Text; using System.IO; using System.Net; using System; using System.Collections.Generic; namespace Com.Alipay { ...

    下面这几个类都是支付宝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
        }
    }

     

    using System.Web;
    using System.Text;
    using System.Security.Cryptography;
    using System.IO;
    using System.Net;
    using System;
    using System.Collections.Generic;
    using System.Xml;
    
    namespace Com.Alipay
    {
        public class Core
        {
    
            public Core()
            {
            }
    
            /// <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 in dicArrayPre)
                {
                    if (temp.Key.ToLower() != "sign" && temp.Key.ToLower() != "sign_type" && temp.Value != "" && temp.Value != null)
                    {
                        dicArray.Add(temp.Key, temp.Value);
                    }
                }
                return dicArray;
            }
            /// <summary>
            /// 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
            /// </summary>
            /// <param name="sArray">需要拼接的数组</param>
            /// <returns>拼接完成以后的字符串</returns>
            public static string CreateLinkString(Dictionary<string, string> dicArray)
            {
                StringBuilder prestr = new StringBuilder();
                foreach (KeyValuePair<string, string> temp in dicArray)
                {
                    prestr.Append(temp.Key + "=" + temp.Value + "&");
                }
    
                //去掉最後一個&字符
                int nLen = prestr.Length;
                prestr.Remove(nLen-1,1);
    
                return prestr.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 = new StringBuilder();
                foreach (KeyValuePair<string, string> temp in dicArray)
                {
                    prestr.Append(temp.Key + "=" + HttpUtility.UrlEncode(temp.Value, code) + "&");
                }
    
                //去掉最後一個&字符
                int nLen = prestr.Length;
                prestr.Remove(nLen - 1, 1);
    
                return prestr.ToString();
            }
            /// <summary>
            /// 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
            /// </summary>
            /// <param name="sWord">要写入日志里的文本内容</param>
            public static void LogResult(string sWord)
            {
                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 string GetAbstractToMD5(Stream sFile)
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                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'));
                }
                return sb.ToString();
            }
            /// <summary>
            /// 获取文件的md5摘要
            /// </summary>
            /// <param name="dataFile">文件流</param>
            /// <returns>MD5摘要结果</returns>
            public static string GetAbstractToMD5(byte[] dataFile)
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                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'));
                }
                return sb.ToString();
            }
        }
    }
    using System.Web;
    using System.Text;
    using System.IO;
    using System.Net;
    using System;
    using System.Collections.Generic;
    
    namespace Com.Alipay
    {
        public class Notify
        {
            #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>
            public Notify()
            {
                //初始化基础配置信息
                _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, string sign)
            {
                //获取返回时的签名验证结果
                bool isSign = GetSignVeryfy(inputPara, sign);
                //获取是否是支付宝服务器发来的请求的验证结果
                string responseTxt = "false";
                if (notify_id != null && notify_id != "") { responseTxt = GetResponseTxt(notify_id); }
    
                //写日志记录(若要调试,请取消下面两行注释)
                //string sWord = "responseTxt=" + responseTxt + "\n isSign=" + isSign.ToString() + "\n 返回回来的参数:" + GetPreSignStr(inputPara) + "\n ";
                //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);
                return preSignStr;
            }
            /// <summary>
            /// 获取返回时的签名验证结果
            /// </summary>
            /// <param name="inputPara">通知返回参数数组</param>
            /// <param name="sign">对比的签名结果</param>
            /// <returns>签名验证结果</returns>
            private bool GetSignVeryfy(SortedDictionary<string, string> inputPara, string sign)
            {
                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;
                    }
                }
    
                return isSgin;
            }
            /// <summary>
            /// 获取是否是支付宝服务器发来的请求的验证结果
            /// </summary>
            /// <param name="notify_id">通知验证ID</param>
            /// <returns>验证结果</returns>
            private string GetResponseTxt(string notify_id)
            {
                string veryfy_url = Https_veryfy_url + "partner=" + _partner + "&notify_id=" + notify_id;
    
                //获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求
                string responseTxt = Get_Http(veryfy_url, 120000);
    
                return responseTxt;
            }
            /// <summary>
            /// 获取远程服务器ATN结果
            /// </summary>
            /// <param name="strUrl">指定URL路径地址</param>
            /// <param name="timeout">超时时间设置</param>
            /// <returns>服务器ATN结果</returns>
            private string Get_Http(string strUrl, int timeout)
            {
                string strResult;
                try
                {
                    HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(strUrl);
                    myReq.Timeout = timeout;
                    HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
                    Stream myStream = HttpWResp.GetResponseStream();
                    StreamReader sr = new StreamReader(myStream, Encoding.Default);
                    StringBuilder strBuilder = new StringBuilder();
                    while (-1 != sr.Peek())
                    {
                        strBuilder.Append(sr.ReadLine());
                    }
    
                    strResult = strBuilder.ToString();
                }
                catch (Exception exp)
                {
                    strResult = "错误:" + exp.Message;
                }
    
                return strResult;
            }
        }
    }
    using System.Web;
    using System.Text;
    using System.IO;
    using System.Net;
    using System;
    using System.Collections.Generic;
    using System.Xml;
    
    namespace Com.Alipay
    {
        public class Submit
        {
            #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
    
            static Submit()
            {
                _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;
                }
    
                return mysign;
            }
    
            /// <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="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>
            /// 建立请求,以表单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>
            /// 建立请求,以模拟远程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 = new StreamReader(myStream, code);
                    StringBuilder responseData = new StringBuilder();
                    String line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        responseData.Append(line);
                    }
    
                    //释放
                    myStream.Close();
    
                    strResult = responseData.ToString();
                }
                catch (Exception exp)
                {
                    strResult = "报错:"+exp.Message;
                }
    
                return strResult;
            }
            /// <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, int lengthFile)
            {
    
                //待请求参数数组
                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 = "\r\nmultipart/form-data; boundary=" + boundaryValue;
                //设置KeepAlive
                request.KeepAlive = true;
                //设置请求数据,拼接成字符串
                StringBuilder sbHtml = new StringBuilder();
                foreach (KeyValuePair<string, string> key in dicPara)
                {
                    sbHtml.Append(boundary + "\r\nContent-Disposition: form-data; name=\"" + key.Key + "\"\r\n\r\n" + key.Value + "\r\n");
                }
                sbHtml.Append(boundary + "\r\nContent-Disposition: form-data; name=\"withhold_file\"; filename=\"");
                sbHtml.Append(fileName);
                sbHtml.Append("\"\r\nContent-Type: " + contentType + "\r\n\r\n");
                string postHeader = sbHtml.ToString();
                //将请求数据字符串类型根据编码格式转换成字节流
                Encoding code = Encoding.GetEncoding(_input_charset);
                byte[] postHeaderBytes = code.GetBytes(postHeader);
                byte[] boundayBytes = Encoding.ASCII.GetBytes("\r\n" + boundary + "--\r\n");
                //设置长度
                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)
                {
                    return e.ToString();
                }
                finally
                {
                    if (requestStream != null)
                    {
                        requestStream.Close();
                    }
                }
    
                //读取支付宝返回处理结果
                StreamReader reader = new StreamReader(myStream, code);
                StringBuilder responseData = new StringBuilder();
    
                String line;
                while ((line = reader.ReadLine()) != null)
                {
                    responseData.Append(line);
                }
                myStream.Close();
                return responseData.ToString();
            }
            /// <summary>
            /// 用于防钓鱼,调用接口query_timestamp来获取时间戳的处理函数
            /// 注意:远程解析XML出错,与IIS服务器配置有关
            /// </summary>
            /// <returns>时间戳字符串</returns>
            public static string Query_timestamp()
            {
                string url = GATEWAY_NEW + "service=query_timestamp&partner=" + Config.Partner + "&_input_charset=" + Config.Input_charset;
                string encrypt_key = "";
    
                XmlTextReader Reader = new XmlTextReader(url);
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(Reader);
    
                encrypt_key = xmlDoc.SelectSingleNode("/alipay/response/timestamp/encrypt_key").InnerText;
    
                return encrypt_key;
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Security.Cryptography;
    
    namespace Com.Alipay
    {
        /// <summary>
        /// 类名:MD5
        /// 功能:MD5加密
        /// </summary>
        public sealed class AlipayMD5
        {
            public AlipayMD5()
            {
                //
                // 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 = new MD5CryptoServiceProvider();
                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'));
                }
    
                return sb.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里面的处理(简单处理)

    using System.Collections.Generic;
    using System.Web.Http;
    using System;
    using Com.Alipay;
    using Npgsql;
    using AlipayFrist.DBUtilty;
    using System.Data;
    //using System.ComponentModel.DataAnnotations;
    using System.Xml;
    using System.IO;
    using System.Xml.Linq;
    using AlipayFrist.Models;
    using System.Linq;
    
    namespace AlipayFrist.Controllers
    {
        /// <summary>
        /// B2C单笔转账到账户的接口
        /// </summary>
        public class MyFristAlipayController : ApiController
        {
            //转账接口
            public object Post(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 = new XmlDocument();
                        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 = new PostgreHelper();
                            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>

     

    展开全文
  • 最近有个项目需求,因为公司每天要进行支付宝转账100-500笔,金额几百到几千不等,开发个转账软件,excal导入转账人,金额,备注等等,方便操作,但是我看了支付宝批量转账接口,每个月只有20000额度的免手续费,...
  • 支付宝转账接口流程

    2019-03-20 10:48:36
    atx-agent实际上还是一个http服务器,运行在电脑上的python程序使用HTTP协议跟手机上atx-agent通信,atx-agent随后启动uiautomator.apk这个应用,将收到的请求转换UiAutomator的UI自动化操作。 python脚本 导包...

    1.安装adb和jdk

    uiautomator2
    uiautomator
    语言:java
    功能:Android自动化测试工具,可完成安卓机的各项操作
    uiautomator2
    语言:pyhton
    功能:Android自动化测试工具,可完成安卓机的各项操作
    底层:Google uiautomator
    能完成的操作有:
    安装软件、启动软件、关闭软件
    单击、双击、长按滑动
    移动文件
    shell命令
    返回、home键、菜单键、音量、相机等。
    解锁、旋屏、截图

    ATX
    uiautomator程序守护
    atx-agent实际上还是一个http服务器,运行在电脑上的python程序使用HTTP协议跟手机上atx-agent通信,atx-agent随后启动uiautomator.apk这个应用,将收到的请求转换成UiAutomator的UI自动化操作。

    python脚本
    导包

    import uiautomator2 as u2
    

    连接 atx

    # 0.0.0.0 为本机,127.0.0.1这个也行,这个连接是在手机上运行的
    d = u2.connect('http://0.0.0.0:7912')
    # 如果远程操作,就填入手机ATX显示的ip,下面有图
    # d = u2.connect('http://172.17.2.237:7912')
    

    python

    启动app

    # 字符串为包名,下面有获取包名教程
    sess = d.session("com.tencent.wework")
    

    获取包名 先通过线连,然后打开usb调试,再电脑命令行(先安装adb)

    adb shell dumpsys activity | grep -i run
    

    adb

    此时看到的一排Run里面的第一个就是当前打开的软件包名,下面那个就是上一次打开的软件包名,往下以此类推,这里我们看到第一个的包名,也就是微信com.tencent.mm,这里我们用企业微信做示范,所以不用它,用第二个。也就是com.tencent.wework
    模拟点击

    def my_click(sess, ele, timeout=3):
        ele.wait(timeout=timeout) # 等待超时,因为可能此时界面动画,或者反映迟钝,该控件还没出现
        x, y = ele.center() # 找到该空间的中间坐标
        sess.touch.down(x, y) # 在此坐标按下
        time.sleep(0.3)
        sess.touch.up() #等待3秒后抬起
    def click_search_btn(sess):
        ele = sess(resourceId=package_name+":id/e3g", #找到该空间的id
                   className="android.widget.TextView",# 找到该空间的类名
                   instance=0) #如果根据属性查找有多个控件,则找第一个
        my_click(sess, ele, 20)
    click_search_btn(sess)
    

    python

    输入搜索

        print('begin to input')
        ele = sess(resourceId="com.tencent.wework:id/dpu", className="android.widget.EditText")
        ele.set_text(phone) # 将手机号填入
        print('end to input')
        time.sleep(2)
        # print(u"点击搜索")
        # 点击搜索
        sess(resourceId="com.tencent.wework:id/azq",
                   className="android.widget.RelativeLayout").child(className="android.widget.TextView").click() # 因为该控件没有id,所以先找它爹,再找它爹的儿子控件,.click()直接触发点击事件。
        ele1 = sess(resourceId="com.tencent.wework:id/sa",
                       className="android.widget.TextView")
        ele1.get_text() # 获取标签文本内容
    

    python

    adb取标签

    要先把ATX服务给停掉,不然取不到。

    首先下载adb,在adb的tools文件夹内,打开monitor

    adb

    然后点击手机,再点击Dump vive.

    adb_Dumpvive

    点击控件,即可显示id和classname

    获取id
    实际工作流程
    1、给手机安装软件

    离线
        将init_machine.sh,及android_package.zip上传至/data/local/tmp目录下
        给手机安装termux,此为命令行工具,打开软件
        输入su,切换至管理员账户
        输入cd data/local/tmp,因为云手机不能打/符,所有用tab键来凑齐。
        输入sh init_machine.sh,即可安装好软件和服务
    usb线连
        在电脑上输入python -m uiautomator2 init即可
        2、打开ATX
        打开ATX 点击"启动uiautomator"
        3、打开QpythonL
        一定要先打开这个软件,不然你python脚本会上传不成功,
    

    打开软件后的顺序为:

    文件
    scripts
    

    4、上传脚本

    将auto_test.py和wx_helper.py上传至/storage/emulated/0/qpython/scripts文件夹下
    5、运行脚本

    打开QpythonL点击auto_test.py文件,点击下方的三角符号

    本文链接:http://172.17.0.88:8360/post/wx_uiautomator2.html

    – EOF –

    作者 admin 发表于 2019-03-04 12:56:46 ,并被添加「 微信 」标签 ,最后修改于 2019-03-04 14:15:59
    « 欢迎使用 Firekylin
    各服务端口说明 »
    Comments

    请在后台配置评论类型和相关的值。

    展开全文
  • PHP版本 只需要简单配置几个key即可。通过已经开通支付账户向支付宝账户转账
  • 提供支付宝开放平台的单笔转账支付宝账户接口JAVA版本demo 望大家共同进步
  • 本人的支付宝转账接口

    热门讨论 2010-12-24 22:04:00
    利用支付宝提供的接口通过http传输协议实现转账和批量退款
  • 支付宝官方提供的接口没有ASP版,这个是定制版本的asp支付宝支付接口(绝对可用!!)
  • 简单支付宝转账接口

    2015-06-19 08:36:15
    &lt;form accept-charset="GBK" action="https://shenghuo.alipay.com/send/payment/fill.htm" method="POST" target="_blank"&gt; &...xxx
     <form accept-charset="GBK" action="https://shenghuo.alipay.com/send/payment/fill.htm" method="POST" target="_blank">
    		<input name="optEmail" type="hidden" value="xxx@xxx.com" /> 
    		<input name="payAmount" type="hidden" value="10" /> <input id="title" name="title" type="hidden" value="给杰哥打赏" />
    		<input name="memo" type="hidden" value="小小意思不成敬意!" />
    		<input name="memo" type="hidden" value="" /> 
    		<input name="pay" type="image" height="80" src="http://www.ssffx.com/templets/lusongsong/images/btn-index1.png" value="打赏" width="80" />
    </form>
        

     

    展开全文
  • 支付宝即时到账接口ASP版,3.4版本

    热门讨论 2016-11-05 23:10:40
    支付宝官方提供的接口没有ASP版,这是参考php版和C#写出来的,类名、函数名基本保持一致的,文件结构也没变,很好维护!
  • 【个人版】支付宝单笔/批量转账接口,无需申请企业支付宝,在线调用秒到账; 实现支付宝批量转账到个人支付宝,可用于团队发工资、各种业务返款,无需验证收款人姓名,实时秒到账,无手续费!! 使用该接口需要向...
  • 目前支付宝支持: 接入 单笔无密到户
  • 支付宝转账最新接口(证书版)的封装

    千次阅读 2020-05-27 21:04:56
    支付宝转账最新接口(证书版)的封装 一,利用支付宝SDK做了精简demo实例 1,所需Jar包有如下共5个: 2,配置文件alipay.properties #支付宝配置 alipay config #应用ID,您的APPID,收款账号既是您的APPID对应...
  • java 对接支付宝单笔转账接口

    千次阅读 2020-04-17 11:40:42
    证书模式及非证书模式转账 查询证书路径 public String queryPath() throws FileNotFoundException, ServerException { String basePath = ResourceUtils.getURL("classpath:").getPath(); basePath = this....
  • 支付宝第三方登录和单笔转账支付宝账户接口的demo,需要替换自己秘钥,有什么问题可以私聊我哦噢噢噢噢哦哦哦哦哦哦哦哦哦
  • java调用支付宝单笔转账接口

    千次阅读 2020-08-12 17:23:58
    接入前准备:https://opensupport.alipay.com/support/helpcenter/192/201602472807?ant_source=zsearch API文档地址:... Maven依赖 <!-- 老版阿里支付宝sdk引入--> <dependency>
  • YII2.0 支付宝接口完美配置,按照教程做百分百成功,教程链接www.phpman.cn/archives/67.html
  • 接口返回参数是成功的,但是支付宝没有生成订单,对方也没有收到钱,是哪里的问题
  • 实现用户提现 资金自动到账 前期的支付宝配置 可以参考文章 支付宝配置 (新版) 当前开发环境: ...支付宝接口新版 1.0  实现提现的步骤  1 开发者平台进行签约  2 找到开发文档
  • 支付宝老版本,H5可直接唤起手机app,相比2.0版本没有了6秒后登录手机网页,更加具有优势。
  • 以前在支付宝做研发,后面有些朋友的公司需要对接支付宝接口,联系我提供支付宝支付接口,希望在转账这块对大家有帮助
  • 支付宝即时到账转账接口,易语言写的,还是不错,需要调用易语言一个模块.
  • Python实现支付宝转账接口

    千次阅读 2018-07-31 15:11:47
    由于工作需要使用python开发一个自动转账接口,记录一下开发过程。 首先需要在蚂蚁金服上申请开通开发者账户,有了开发者账户就可以使用沙箱进行开发了。 在开发之前我们需要在沙箱应用中填写密钥,密钥的获取可以...
  • 接口返回: { "success": true, "value": { "body": "{\"alipay_fund_trans_uni_transfer_response\":{\"code\":\"10000\",\"msg\":\"Success\",\"order_id\":\"20191115110070000006040050105202\",\"out_biz_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,386
精华内容 8,154
关键字:

支付宝转账接口