zoukankan      html  css  js  c++  java
  • 在线支付(模拟支付宝)

     

        简介:为了减小学习成本,这里使用第三方的一个支付宝模拟平台!完成在线支付的学习。在真实使用支付宝接口对接时,原理基本都差不多!下面开始正文部分

    测试平台网址:http://paytest.rupeng.cn/

        注:这里只是一个模拟支付宝的虚拟平台,数据并非真实数据。也不是真正的支付宝页面。仅供学习测试在线支付接口时使用!

    一.接口文档:

    网关地址:http://paytest.rupeng.cn/AliPay/PayGate.ashx

    网关参数说明:
    partner:          商户编号
    return_url:      回调商户地址(通过商户网站的哪个页面来通知支付成功!)
    subject:          商品名称
    body:             商品描述
    out_trade_no:订单号!!!(由商户网站生成,支付宝不确保正确性,只负责转发。)
    total_fee:       总金额
    seller_email:  卖家邮箱
    sign:             数字签名。为按顺序连接 总金额、 商户编号、订单号、商品名称、商户密钥的MD5值。

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

    out_trade_no:  订单号。给PayGate.ashx传过去的out_trade_no再传回来
    returncode:     返回码,字符串。ok为支付成功,error为支付失败。
    total_fee:       支付金额
    sign:             数字签名。为按顺序连接 订单号、返回码、支付金额、商户密钥为新字符串的MD5值。

    二.使用方法:

    1.客户端html文件,提交获取用户输入的数据

    复制代码
    <body>
        <form action="payhandler.ashx" method="post">
        <label for="tbname">商品名称</label><input type="text" name="tbname" id="tbname" /><br />
        <label for="tbms" >商品描述</label><input type="text" name="tbms" id="tbms" /><br />
        <label for="tbnum">订单号</label><input type="text" name="tbnum" id="tbnum" /><br />
        <label for="tbmoney">总金额</label><input type="text" name="tbmoney" id="tbmoney" /><br />
        <label for="tbmail">卖家邮箱</label><input type="text" name="tbmail" id="tbmail" /><br />        
        <input type="submit" id="btnpay" value="支付" />
            </form>
    </body>
    复制代码

    2.这里的参数通过表单提交服务器,服务器获取这些数据。处理好参数向支付宝发送请求

    复制代码
     1 public void ProcessRequest(HttpContext context)
     2 {
     3     context.Response.ContentType = "text/plain";
     4     string partner = "2";
     5     string subject = context.Request["tbname"];//商品名称
     6     string body = context.Request["tbms"];       //商品描述
     7     string out_trade_no = context.Request["tbnum"];//订单号
     8     string total_fee =context.Request["tbmoney"]; //总金额
     9     string seller_email = context.Request["tbmail"];//卖家邮箱
    10     string return_url = "http://localhost:13702/returnHandler.ashx";//回调地址
    11     string key = "abc123";
    12     string sign = CalcMD5(total_fee + partner + out_trade_no + subject + key);
    13     //重定向到支付的页面
    14     context.Response.Redirect("http://paytest.rupeng.cn/AliPay/PayGate.ashx?partner=" + partner + "&return_url=" + context.Server.UrlEncode(return_url) + "&subject=" + context.Server.UrlEncode(subject) +
    15         "&body=" + context.Server.UrlEncode(body) + "&out_trade_no=" + context.Server.UrlEncode(out_trade_no) + "&total_fee=" + total_fee + "&seller_email=" + context.Server.UrlEncode(seller_email)
    16         + "&sign=" + sign);     
    17 }
    复制代码

    3.支付平台处理请求,当看到这个界面时,表示请求的参数一切正常,可以完成支付了

       注:这里的用户名密码,没有做任何判断,可任意输入

    4.在回掉地址中,完成用户支付之后的逻辑代码

    复制代码
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        string out_trade_no = context.Request["out_trade_no"];//订单号
        string returncode = context.Request["returncode"];       //返回码
        string total_fee = context.Request["total_fee"];//支付金额
        string sign = context.Request["sign"]; //总金额
        if(sign!=CalcMD5(out_trade_no+returncode+total_fee+"abc123"))//防止用户随意篡改数据
        {
            context.Response.Write("数据校验失败");
            return;
        }
        if (returncode == "ok")
        {
            context.Response.Write("支付成功,支付的金额为" + total_fee);
        }
        else
        {
            Console.WriteLine("支付失败");
        }
    }
  • 相关阅读:
    文本省略并显示省略号
    屏蔽IOS端alert窗口带URL的方法
    vue实现打印功能
    使用vue-cli搭建vue项目
    四元表达式
    循环数组中的对象 放进另一个数组对象里面
    vue中选择图片,预览图片,返回base64
    上传图片,预览并保存成blob类型 和 base64
    【HbuilerX-Bug】终端无法显示打印信息,也无法输入
    el-tag标签使用三元表达动态改变type类型
  • 原文地址:https://www.cnblogs.com/LiChen19951127/p/9932067.html
Copyright © 2011-2022 走看看