支付宝二维码API的实现和文档

1、首先。我们清楚既然是API,那必然有文档。在这里我会贴出我与alipayCoder一遍联调一边写的文档(在原著上进行修改的)。这里我先把文档贴出。请大家仔细看。

文档下载地址:http://download.csdn.net/download/x15928666119/4199991

总结:

1、生成二维码的步骤(根据你的ID和key(支付宝的授权) + 生成二维码的参数列表拼接字符串)(字符串的拼接说明:拼接成URL。1、key (参数名)+ “=” + value(参数值)按照key.a-z的排序2、拼接排序后的结果例如:bizname="黄翔"&return_url="returnUrl.asxp"(我这里只举例2个参数.详情看API文档)进行编码例如:utf-8获得URL地址。3、将生成的URL地址 + key = “keyvalue”(你的key)进行MD5加密获得sign。4、将完整的url连接:带http://进行模拟请求。5、获得模拟请求结果(在当前页面、会返回xml数据。这里对xml数据解析保存至服务器或你的txt文本。方便以后调用。)6、根据返回的二维码进行图片生成(网上很多的二维码生成DLL。如果需要可以联系我QQ:1434197610.))7、就是你们运营的使用了。大致讲完。有什么不明白的留言吧。这里我还是将我的代码贴出.草稿代码哈。别批我。呵呵呵

新增二维码操作代码部分:

<p>
	<pre name="code" class="csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.Collections;
using System.Data;
using System.Xml;
using System.Security.Cryptography;
using ThoughtWorks.QRCode.Codec;
using System.IO;

namespace TopAPIDemo
{
    /// <summary>
    /// 新增二维码产品
    /// </summary>
    public partial class WebForm1 : System.Web.UI.Page
    {
        //string tmp = "https://mapi.alipay.com/gateway.do?sign_type=MD5&partner=2088101103495019&sign=ffa3e1a9708f07ad20c5229cf9815877&_input_charset=UTF-8&qrcode=%5BAlipay%5D%3A7435301335625758&service=alipay.mobile.qrcode.create&method=stop";
        //API入口
        string url = "https://mapi.alipay.com/gateway.do?";
        //加密类型
        string sign_type = "sign_type=MD5";
        //联测key
        //自我开发测试key
        //正式key
        string key = "";
        //合作商户ID。授权标识
        string partnerKey = "partner"; string partnerValue = "";  //正式PID //string partnerValue = "";test PID:
        //编码格式
        string _input_charsetKey = "_input_charset"; string _input_charsetValue = "UTF-8";
        //二维码。这里保存二维码地址
        string qrcodeKey = null; string qrcodeValue = null;
        //API输入参数签名结果
        string sign = null;
        //指示调用函数
        string serviceMethodKey = "service"; string serviceMethodValue = "alipay.mobile.qrcode.create";

        //二维码操作方式
        string methodKey = "method"; string methodValue = MethodType.MethodType_add;
  
        //收款方支付宝账号(手机号码或者邮箱地址)。当method=add时不可空
        string recevie_accountKey = "recevie_account"; string recevie_accountValue = "alipay-test12@alipay.com"; //正式账号:

        //收款方名称(收款方在手机上显示的名称)。当method=add时不可空
        string recevie_account_nameKey = "recevie_account_name"; string recevie_account_nameValue = "通吃网";

        //订单名称编号(商品名称).获得平台自身数据进行数据赋值接入当method=add时不可空。
        string biz_nameKey = "biz_name"; //string biz_nameValue = "重庆特产奉节脐橙10公斤包邮 纯绿色脐橙(公益项目,请单独购买)23号发货";//值从文本狂获取

        //交易默认金额,交易默认金额,以元为单位。格式为:xx.xx,小数点后保留两位小数,如19.71。当method=add时不可空。
        string biz_amountKey = "biz_amount"; //string biz_amountValue = "0.10";//对应键的值根据业务规则从数据查询获取

        //交易金额列表。格式必须为:{title}|{name1,name2..}|{value1,value2..}当method=add时不可空。通过具体的商品来进行操作
        string biz_amount_listKey = "biz_amount_list"; string biz_amount_listValue = "{优惠}|{特惠价}|{00.10}";

        //商户生成二维码且用户使用了二维码,创建了一笔交易,支付宝通过该路径通知商户系统下订单。如果为空则不通知商户系统。
        string return_urlKey = "return_url"; string return_urlValue = "http://" + HttpContext.Current.Request.Url.Host.ToString() + "/return_url.aspx";//return_url.aspx

        //支付成功后,支付宝通过该路径通知商户支付成功,同时获取商户商品信息。如果为空则不通知商户系统。
        string notify_urlKey = "notify_url"; string notify_urlValue = "http://" + HttpContext.Current.Request.Url.Host.ToString() + "/notify_url.aspx";

        //业务类型。值为:1:商品购买 2:我要付款
        //商品购买是指用户通过拍摄二维码购买某种商品,如购买游戏点卡;
        //我要付款是指用户拍摄二维码直接向另一用户付款。
        string biz_typeKey = "biz_type"; string biz_typeValue = "";

        //用户拍摄二维码后在支付宝客户端显示的商品的可选数量列表,格式为:{count1,count2..}.例:{1,2,3,4,5}.该列表通过数据库获得商品库存来进行填充
        string biz_count_listKey = "biz_count_list"; string biz_count_listValue = "{1,2,3,4,5}";

        //交易类型1:即时到账我要收款交易2:即时到账我要付款交易3:担保交易。默认值为1
        string trade_typeKey = "trade_type"; string trade_typeValue = "1";

        //是否需要收获地址
        string need_addressKey = "need_address"; string need_addressValue = "T"; 

        //如果用户超过该时间不支付,则该交易关闭。单位为分钟,取值范围为5~60。默认为5分钟。
        string pay_timeoutKey = "pay_timeout"; string pay_timeoutValue = "5";

        //1:不带订单名称(对应于biz_name属性)的二维码2:带订单名称(对应于biz_name属性)的二维码默认为1。
        string qrcode_styleKey = "qrcode_style"; string qrcode_styleValue = "2";

        string memoKey = "memo"; string memoValue = "通吃网零食真好吃";

        protected void Page_Load(object sender, EventArgs e)
        {   
            
        }   

        /// <summary>
        /// 新增二维码产品
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnCreate_Click(object sender, EventArgs e)
        {
            mt.Model.Products pro = null;
            string tmptxt = TextBox1.Text;
            if (tmptxt.Trim() != "")   
            {
                pro = new mt.BLL.Products().GetModel(TextBox1.Text);   //获得产品信息
                if (pro != null)                                       //对输入的产品名进行非null验证
                {
                    QREnty enty = new QREnty();
                    enty.ProductID = pro.ProductID;
                    enty.ProductName = pro.ProductName;
                    //验证需要生产二维码的商品是否曾经已经生成
                    if (this.GetQRCodeByProductName(enty))//
                    {
                        //向支付宝请求创建二维码并获得二维码条根据它创建二维码图片和数据信息(XML)保存至本地服务器
                        if (CreateQrcodeImgByAplieQrcode(enty, pro))
                        {
                            enty.ImgUrl = ViewState["imgUrl"] != null ? ViewState["imgUrl"].ToString() : "";
                            enty.QRCode = ViewState["QrCode"] != null ? ViewState["QrCode"].ToString() : "";
                            if (this.SaveQRCodeByXML(enty))
                            {
                                Image1.ImageUrl = enty.ImgUrl;
                                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "yes", "alert('恭喜,新增二维码产品成功');", true);
                            }
                            else { ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "errosql", "alert('二维码产品保存至数据库失败');", true); }
                        }
                        else
                        {
                            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "erroQR", "alert('生成二维码产品失败');", true);
                        }
                    }
                    else
                    {
                        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "erroExits", "alert('当前产品已经是二维码产品')", true);
                    }
                }
                else
                {
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "erroNothingPro", "alert('没有该产品,请重新输入')", true);
                }
            }
            else { ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "erroNothing", "alert('产品名不能为空')", true); }
        }

        /// <summary>
        /// 根据产品名模糊搜索二维码产品信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnSeeImage_Click(object sender, EventArgs e)
        {
            string tmp = TextBox1.Text.Trim();
            if (tmp != "")
            {
                QREnty enty = new QREnty();
                enty.ProductName = tmp;
                QREntyDAL dal = new QREntyDAL();
                enty = dal.GetModel(enty, 2);
                if (enty != null)
                {
                    Image1.ImageUrl = enty.ImgUrl;
                }
                else { ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "errosqlnodataSourseObj", "alert('没有该信息,请重新输入检索')", true); }

            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "errosqlnodataSourse", "alert('文本框为空,请重新输入检索')", true);
            }
        }

        #region 本地数据库操作  新增二维码产品,验证产品是否已经是二维码产品  处理步骤五
        /// <summary>
        ///  将请求的来的数据信息保存
        /// </summary>
        bool SaveQRCodeByXML(QREnty enty)
        {
            QREntyDAL dal = new QREntyDAL();
            if (dal.Add(enty) > 0)
            {
                return true;
            }
            this.WrtieLogSign("ADDSQLErro", "将生成的二维码信息保存至服务器数据库失败");
            return false;
        }

        /// <summary>
        /// 通过要生成的产品名称去检查当前生成商品是否已经存在
        /// </summary>
        /// <returns>true为不存在</returns>
        bool GetQRCodeByProductName(QREnty entytmp)
        {
            QREntyDAL dal = new QREntyDAL();

            if (dal.GetModel(entytmp, 2) == null)
            {
                return true;
            }
            return false;
        }
        #endregion

        #region 根据支付宝回传的二维码ID生成相关产品图片 处理步骤四
        /// <summary>
        /// 根据支付宝回传的二维码ID生成相关产品图片并向数据库进行信息添加
        /// </summary>
        /// <param name="enty">实体信息</param>
        /// <returns>bool。为true成功</returns>
        bool CreateQrcodeImgByAplieQrcode(QREnty enty, mt.Model.Products pro)
        {
            enty.QRCode = this.xmlGetQrcodeImgByAplieQrcode(this.GetRequestUrl(pro));
            if (enty.QRCode != null)
            {
                ViewState.Add("QrCode", enty.QRCode);
                QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
                try
                {
                    //int scale = Convert.ToInt16(Request["Txtsize"].ToString());
                    //指定生成二维码图片大小
                    qrCodeEncoder.QRCodeScale = 4;
                    //指定生成方式
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                    #region 本版号指定,二维码纠错能力指定 其他的二维码图片生成模式
                    //try  指定版本号
                    //{
                    //    int version = Convert.ToInt16(Request["DDLVer"].ToString());
                    //    qrCodeEncoder.QRCodeVersion = version;
                    //}
                    //catch (Exception ex)
                    //{
                    //    return false;
                    //}
                    //string errorCorrect = Request["DDLJC"].ToString();
                    //if (errorCorrect == "L")
                    //    qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
                    //else if (errorCorrect == "M")
                    //    qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
                    //else if (errorCorrect == "Q")
                    //    qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
                    //else if (errorCorrect == "H")暂定为最高级的纠错能力

                    //String encoding = Request["DDLEncode"].ToString();
                    //if (encoding == "Byte")
                    //{
                    //    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                    //}
                    //else if (encoding == "AlphaNumeric")
                    //{
                    //    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
                    //}
                    //else if (encoding == "Numeric")
                    //{
                    //    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
                    //}
                    #endregion

                    #region 开始生成二维码
                    qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
                    String data = enty.QRCode;
                    System.IO.MemoryStream ms = new System.IO.MemoryStream();
                    System.Drawing.Image myimg = qrCodeEncoder.Encode(data);
                    myimg.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                    myimg = System.Drawing.Image.FromStream(ms);
                    string address = Server.MapPath("QRImage") + "\\" + enty.QRCode.Replace(":", "").Replace("[", "").Replace("]", "") + ".gif";
                    myimg.Save(address);
                    ViewState.Add("imgUrl", "QRImage/" + enty.QRCode.Replace(":", "").Replace("[", "").Replace("]", "") + ".gif");
                    //进行数据库操作
                    return true;
                    //将生成的图片输出
                    //Response.ClearContent();
                    //Response.ContentType = "image/Gif";
                    //Response.BinaryWrite(ms.ToArray());
                    //Response.End();

                    #endregion

                }
                catch (Exception ex)
                {
                    this.WrtieLogSign("CreateImgByQRCode", "根据二维码字符串创建二维码图片失败");
                    return false;
                }

            }
            this.WrtieLogSign("NoQRCodeByParamerters", "根据二维码字符串创建二维码图片失败");
            return false;
        }

        #endregion 

        #region 模拟请求,获得二维码数据 处理步骤三
        /// <summary>
        /// 通过请求拼接的URL地址获取相关XML数据
        /// </summary>
        /// <param name="httpUrl">请求地址</param>
        /// <returns>二维码号码</returns>
        public string xmlGetQrcodeImgByAplieQrcode(string httpUrl)
        {
            string xmlPath = httpUrl; // 该地址不能包含中文
            DataSet ds = new DataSet();
            WebClient wc = new WebClient();
            //对请求地址的数据开始进行下载
            byte[] bt = wc.DownloadData(xmlPath);
            string source = Byte2String(bt);
            //加载请求xml中的相关产品信息数据
            XmlControl xd = new XmlControl(xmlPath, XmlControl.enumXmlPathType.AbsolutePath);
            string boolIs_success = xd.GetXmlNodeValue("alipay/is_success");
            if (boolIs_success.ToLower() == "t")
            {
                string tmpCode = xd.GetXmlNodeValue("alipay/response/createQrcode/qrcode");
                return tmpCode;
            }
            this.WrtieLogSign("QRCodeCreateErro","请求获得二维码字符串失败");
            return null;
        }

        /// <summary>
        /// 进行字符串编码
        /// </summary>
        /// <param name="bt"></param>
        /// <returns></returns>
        public static string Byte2String(byte[] bt)
        {
            System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("UTF-8");
            string str = encoding.GetString(bt);
            return str;
        }


        //交易安全验证码zpdjh9ywq433ejjnkrbc5pys7ipkosnz

        #endregion

        #region 新增二维码URL地址处理 处理步骤二
        /// <summary>
        /// 新增二维码URL地址处理
        /// </summary>
        /// <param name="pro">产品实体</param>
        /// <returns>发起请求的URL</returns>
        public string GetRequestUrl(mt.Model.Products pro)
        {
            if (pro != null)
            {
                Dictionary<string, string> dicArray = new System.Collections.Generic.Dictionary<string, string>();
                dicArray.Add(partnerKey, partnerValue);
                dicArray.Add(_input_charsetKey, _input_charsetValue);
                dicArray.Add(serviceMethodKey, serviceMethodValue);
                dicArray.Add(methodKey, methodValue);
                dicArray.Add(recevie_account_nameKey, recevie_account_nameValue);
                dicArray.Add(recevie_accountKey, recevie_accountValue);
                dicArray.Add(biz_nameKey, pro.ProductName);
                dicArray.Add(biz_amountKey, (pro.ProductType == 4 ? pro.PriceOriginal : pro.Price).ToString());
                dicArray.Add(biz_amount_listKey, (pro.ProductType == 4 ? "{优惠}|{特惠价}|{" + pro.PriceOriginal + "}" : "{零售价}|{最低零售价}|{" + pro.Price + "}"));
                dicArray.Add(return_urlKey, return_urlValue);
                dicArray.Add(notify_urlKey, notify_urlValue);
                dicArray.Add(need_addressKey, need_addressValue);
                //dicArray.Add(qrcode_styleKey,qrcode_styleValue);
                //dicArray.Add(memoKey,memoValue);
                //开始进行排序
                //dicArray = AlipayClass.AlipayFunction.Para_filter(dicArray);
                //获得参数请求地址
                string urlTmpLink = AlipayClass.AlipayFunction.Create_linkstring_urlencode(dicArray);
                //生成签名
                sign = "sign=" + this.GetMySign(pro);
                //拼接请求地址
                string tmpppp = url + urlTmpLink + sign + "&" + sign_type;
                this.WrtieLogSign("postUrl", tmpppp);
                //将请求地址返回
                return tmpppp;
            }
            //产生产品信息实体为空的日志
            this.WrtieLogSign("ProductIsNull", "‘新增二维码URL地址处理’方法内产品实体信息为空");
            return null;
        }
        #endregion

        #region   获得签名证书  处理步骤一

        public string GetMySign(mt.Model.Products pro)
        {
            int i;
            string[] Oristr ={ 
                partnerKey + "="+ partnerValue, 
                _input_charsetKey + "=" + _input_charsetValue, 
                serviceMethodKey + "=" + serviceMethodValue, 
                methodKey + "=" + methodValue, 
                recevie_account_nameKey + "=" + recevie_account_nameValue, 
                recevie_accountKey + "=" + recevie_accountValue, 
                biz_nameKey + "=" + pro.ProductName,  
                biz_amountKey + "=" + (pro.ProductType == 4 ? pro.PriceOriginal : pro.Price).ToString(), 
                biz_amount_listKey + "=" + (pro.ProductType == 4 ? "{优惠}|{特惠价}|{" + pro.PriceOriginal + "}" : "{零售价}|{最低零售价}|{" + pro.Price + "}"),
                return_urlKey + "=" + return_urlValue,
                notify_urlKey + "=" + notify_urlValue,
                need_add
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要调用支付宝和微信支付功能生成二维码,你需要使用它们的支付接口,并按照接口文档进行相应的开发和配置。下面是一般的步骤: 1. 注册开发者账号: - 支付宝:前往支付宝开放平台(https://open.alipay.com/)注册开发者账号。 - 微信支付:前往微信支付开放平台(https://pay.weixin.qq.com/)注册开发者账号。 2. 创建应用: - 支付宝:在支付宝开放平台创建应用并获取应用的AppID、私钥等信息。 - 微信支付:在微信支付开放平台创建应用并获取应用的AppID、商户号、API密钥等信息。 3. 集成SDK或API: - 支付宝:根据支付宝提供的SDK或API,将其集成到你的Java项目中。使用SDK或API提供的方法调用支付接口,生成支付二维码。 - 微信支付:同样地,根据微信支付提供的SDK或API,将其集成到你的Java项目中。使用SDK或API提供的方法调用支付接口,生成支付二维码。 4. 生成二维码: - 支付宝:调用支付宝提供的接口,传入相应的参数(如订单信息、金额等),获取支付链接。然后使用第三方库(如Zxing)将支付链接生成二维码。 - 微信支付:类似地,调用微信支付提供的接口,传入相应的参数(如订单信息、金额等),获取支付链接。然后使用第三方库(如Zxing)将支付链接生成二维码。 需要注意的是,具体的实现方式和代码会因为不同的开发语言和框架而有所差异。你可以参考支付宝和微信支付的官方文档或者查找相关的开发教程,以获得更具体的指导和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值