ASP.NET MVC 支付宝当面付(沙箱环境)-即扫二维码支付1(填坑)

1,环境 我用的是 vs2017    创建一个 mvc项目  新建一个文件夹将 SDK 文件放进去

sdk地址

:https://support.open.alipay.com/docs/doc.htm?spm=a219a.7386797.0.0.k0rwWc&treeId=193&articleId=105201&docType=1

下载后直接解压到箭头指向的AliPaySDK


创建一个控制器:

using Aop.Api;
using Aop.Api.Request;
using Aop.Api.Response;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WsyCardInfo.App_Start;

namespace WsyCardInfo.Controllers
{
    public class AliPayController : Controller
    {


        // GET: AliPay
        [NoPermissionRequiredAttribute]
        public ActionResult Index()
        {
            return View();
        }
        [NoPermissionRequiredAttribute]
        public ActionResult FaceToPay()
        {   //域名
            const string URL = "https://openapi.alipaydev.com/gateway.do";  //沙箱环境与正式环境不同 这里要用沙箱的 支付宝地址
            //	APPID即创建应用后生成
            const string APPID = "2016091500513966";
            //开发者应用私钥,由开发者自己生成  开发者私钥到底是什么玩意  原来开发者私钥就是商户应用私钥
            const string APP_PRIVATE_KEY = "MIIEowIBAAKCAQEArVWg55eFMf7rFLVpFAxGgMQfxGWd7swqxNkOu1Y/0Wt14HZik4+U0kycQuYtOFBbwael8vlr/Q+BaqtpwwI+g+yJVma+uLYkmVaWHqswh1XocX3gOfLWxFp1DwPcNesFpbZ9wndxrZL9+wWMtbiB4TV3jBAcFbAzOgLvH4+IveS88H6jjTTpHeogxJpZ0EU37Nucpsae2yiJJyACmgZDlY3qEABkFpiaD2Kc+EvGDPXyEKSufv8f+GxUTKgE25c0NhP9hSJPND1+reygiJy4sFIEuZ5960LRd/1kJgUIuW+JgA50AXI/SXEzHqBJO0ZvT9hZjSIbOtvGjbQp+d9azwIDAQABAoIBAHQjJn9l13nLKqmibzhejTKjtgE6cNpac+GW6bb9sB7aGI3/5EaocneBm0V7whq0RPZ5JMiq8/8Hz5ewKFnf/BEagF6i0vEiIV2YVVdRLl/PYMICLCXHnrzLOxmHZZm+0fbZUmPk8gbxsTjq2/+6E1PZJjNza83gVEJvStbjriRErp5LwMYCO3Qz3KDaPHFUaP5IRR6b+qJeLbrArFNv3zKV9b3TRe1loSIqrUfgSfW7Qh8rEjTub0BxjFqkOeVUrCPlrNz4NqTjOmPBf1tJ+xLFXsYlom4mGoaXKx9UIQgirLkh++HM+fHHrsICg3CA1tKBjf6OYXqLsvsXCd7T0okCgYEA4Yrrhzgmp9OWt1HS5HkAAlErYQoal6JrmfWd5cZOMwgp5YqmfXoV/QgwC0mbXun01JshgnOsmKy2GiOeUlsCRLhGJCm0piI/o9pSwiUyhe65AFLltyQJXmAVWsCeXjyEDDXSheZ1dL6akjVcs4dKSA+E3+lYs+m3mHBy7cXD8esCgYEAxL3bFNAe3iYqnt0/Ncv1SM7cxYJTZMjtEOiVp3sMvcgQCPPzl5CONkIuNKT5F4o8BCMQU0AzzDHxyxAuaspT4EcXQvCm5UIi5BioYnq0IEVVxuRa+AT6bHLxdyd0wsAzEhbrncUGe2ncQ1SKLuKy7UygCA3DBn++v0aqPrGX3a0CgYBPKtAZmqAW8LJKjrIT+FUEezFa0o0bBKv4Urql2MHCL+9k3xIpoRzuwFz82U1sN3r01a8hdzDyNk2FR1NfXQqizHvyXaFHX2YvQYcjFqNxV6YgcvinHEMdmWRlgo8UTPGcx5ep4IcB/5WKFKkBa0+rk6b0YZf9LuB+5Zmx1GU/GQKBgQCufahp7DAEXRtd7OJcBznTykx6DB2EfMPtRCs+8F6bj23RUvQPz9ChhM7QOCUIYLzb+nFHNOD70KwfqolQg4QinUqfPyr2mFKztL7bIPLS0EvEa9HWuSuVtdg9Esx20do5yARO2GjoWjpVqQwpizygRF6G5hW7lN8LbFQf6IjFvQKBgBdlb1h1rfJcPjkFGyIgr7B36eCrKdlRvNVsnMiqXi+3z5kbYXyePEiIfRYolg7UZI2tAAuHFZmxWwSFccREwKvs1rXSqWs0LqvaR7UizGxDq6AUdtz60jfsnkq6RAqwlA2m5ZW0Kf0QivElWxV1pM71ddU7evUNZTOgwL6qX1oG";
            //参数返回格式,只支持json
            const string FORMAT = "json";
            //请求和签名使用的字符编码格式,支持GBK和UTF-8
            const string CHARSET = "UTF-8";
            //支付宝公钥,由支付宝生成     到蚂蚁金服复制
            const string ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApdBe/PUjBBEwYM4/H9clg0yrD1f8KoFusXqgiL4OegnizB2M4lGq7kCkXgwTIxJcOnaLTq2PsE/f0DFNq9GW3xxuLeioh0pjUqG4KV7bFhNy2Wipeja6A+IX1wbhH1AcHYfoGBVjfqEPvqvNWJPCE2ClAZLkNv2pwbC1cKXG48jKX9iVcCmJBl/qgMAcYfgdm37zjcdcgsd/EfHGT8HtiYb08UR+olsxG6Pi7nfc+yLaqGNJyhu6L6lgnQBUxD+fjrFFwPrF6fE0MMm7dljWRO8HiZTTjt8ia4rs8Be05dkd3IDRCoWTcNAd9+tTxV62gcw6rMM92zXMWlzWePk4NQIDAQAB";

            IAopClient client = new DefaultAopClient(URL, APPID, APP_PRIVATE_KEY, FORMAT, "1.0", "RSA2", ALIPAY_PUBLIC_KEY, CHARSET, false);

            //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:
            AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类


            //SDK已经封装掉了公共参数,这里只需要传入业务参数


            //此次只是参数展示,未进行字符串转义,实际情况下请转义
            request.BizContent = "{" +
                                "    \"out_trade_no\":\"20150320010101002\"," +
                                "    \"total_amount\":\"88.88\"," +
                                "    \"subject\":\"Iphone6 16G\"," +
                                "    \"store_id\":\"NJ_001\"," +
                                "    \"timeout_express\":\"90m\"}";
            AlipayTradePrecreateResponse response = client.Execute(request);
            //调用成功,则处理业务逻辑
            if (!response.IsError)
            {
                var res = new
                {   success = true,
                    out_trade_no = response.OutTradeNo,
                    qr_code =response.QrCode    //发现返回的是一个网址,后续需要用这个网址字符串创建二维码
                };
                return Json(res);
            }
            else {
                var res = new
                {
                    success = false,
                };
                return Json(res);
            }
        }
    }
}

随便写一个页面 Index

@{
    Layout = null;
}

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <style>
        /** {
            margin: 0;
        }

        .wr-qr {
            width: 500px;
            border: 1px solid black;
            position: absolute;
            left: 50%;
            top: 50%;
        }

            .wr-qr .qr-order {
                width: 100%;
            }

                .wr-qr .qr-order label {
                    color: black;
                    font-weight: bold;
                    font-size: 12px;
                }

        .qr-code-img {
        }*/
    </style>
    <script src="~/scripts/jquery-easyui-1.4.1/jquery.min.js"></script>
    <script>
        $(function () {
            var img = $('.qr-code-img');
            var test = $('#test');

            $('#btn').on('click', function (e) {
                $.ajax({
                    url: '@Url.Action("FaceToPay", "AliPay")',
                    type: 'post',
                    success: function (e) {
                        if (true) {
                            $('.qr-code-img').attr('src', e.qr_code);
                            $('#test').html(e.out_trade_no);
                        } else {
                            alert('失败');
                        }
                    },
                    error : function (e) {
                        alert('发送失败');
                    }
                })
            })
        })
    </script>
    <title>支付宝支付Demo</title>
</head>
<body>
    <div> 
        <input id="btn" type="button" name="name" value="直接购买充气娃娃" />
    </div>
    <div class="wr-qr">
        <div class="qr-order">
            <label id="test">内容</label>
        </div>
        <div class="qr-order">
            <img src="#" class="qr-code-img" alt="Alternate Text" />
        </div>
    </div>
</body>
</html>

填坑 : 点击调试  :发现 启动不了

报错内容如下



原因有两个:

1.在添加进来的sdk有如下文件,这个项目的特性与原项目冲突,注释掉即可


2. 在sdk文件中的 AopResponse.cs 类 属性中的 Code 和 Msg 会和继承这个类的 属性发生冲突

解决方法:

将 Code 改为 M_Code  将 Msg 改为 M_Msg


然后f5调试就可以顺利启动了  

最后要注意 因为是沙盒环境   控制器中的   URl是  如下与正式环境不同

  const string URL = "https://openapi.alipaydev.com/gateway.do"; 

点击页面按钮发现  支付宝返回的是一个网址 需要自己 把 这个网址字符串 转为二维码 而且这个二维码只有沙箱账号的买家账号才可以实现扫码

打开页面已经可以获取到订单号 和二维码的网址 :


将网址 https://qr.alipay.com/bax036906seucrzwkwlu003c 放到草料二维码生成器

有沙箱买家账号扫码:


二维码 等待后续开发


  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值