支付宝-支付圈签名

流程:

1.支付圈签名

商户根据自己跟支付宝协议的partner(合作者身份ID)和支付宝提供的私钥来根据加密形成一个支付宝链接

该链接提供给分销商,分销商在该链接下登录到自己的账户,授予商户自动扣款,自动退款的权限。

注:MD5签名

在MD5签名时,需要私钥参与签名。MD5的私钥是以英文字母和数字组成的32位字符串。商户可登录到商户服务中心(https://b.alipay.com),安装数字证书,在“技术服务”栏目中点击“交易安全校验码”,即可查看。
当拿到请求时的待签名字符串后,需要把私钥直接拼接到待签名字符串后面,形成新的字符串,利用MD5的签名函数对这个新的字符串进行签名运算,从而得到32位签名结果字符串(该字符串赋值于参数sign)。

支付宝链接生产代码:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.UI.WebControls;
using System.Security.Cryptography;
using System.Web.Security;

namespace Test
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        private const string service = "sign_protocol_with_partner";//支付圈签约接口名称
        private const string _input_charset = "utf-8";//参数编码字符集
        private const string sign_type = "MD5";//签名方式
        private const string sign = "p03xcy9nlivneft9sl4lhd8y35pinaaw";//私钥
        private const string partner = "2088611192328117";//合作身份者ID

        protected void Page_Load(object sender, EventArgs e)
        {
            string url = GetAlipayLink();
            Response.Write(url);
        }

        public string GetAlipayLink()
        {
            //拼写签名字符串
            StringBuilder strBuilder = new StringBuilder();
            strBuilder.Append("_input_charset=" + _input_charset);
            strBuilder.Append("&partner=" + partner);
            strBuilder.Append("&service=" + service);
            //最后加上私钥
            strBuilder.Append(sign);
            //签名
            string sign2 = Sign(strBuilder.ToString(), sign_type, _input_charset);
            //支付宝链接
            string url = "https://mapi.alipay.com/gateway.do?service=" + service + "&partner=" + partner + "&_input_charset=" + _input_charset + "&sign_type=" + sign_type + "&sign=" + sign2;
            return url;
        }
        /// <summary>
        /// 签名字符串
        /// </summary>
        /// <param name="prestr">需要签名的字符串</param>
        /// <param name="sign_type">签名类型</param>
        /// <param name="_input_charset">编码格式</param>
        /// <returns>签名结果</returns>
        public static string Sign(string prestr, string sign_type, string _input_charset)
        {
            StringBuilder sb = new StringBuilder(32);
            if (sign_type.ToUpper() == "MD5")
            {
                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();
        }
    }
}

复制代码

 

链接例子:

https://mapi.alipay.com/gateway.do?service=sign_protocol_with_partner&partner=2088611192328117&_input_charset=utf-8&sign_type=MD5&sign=697c3d9c8626188dd582ac18c8df20ae

 

posted @   hongdada  阅读(903)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2012-12-04 sql行列转换,字符串相加
点击右上角即可分享
微信分享提示