抖音小程序 通用交易系统 C#示例代码

这个是抖音小程序,接入担保支付的C#代码demo案例

由于官方只提供了java,php等语言的demo,特此分享一个C#版本

//首先声明三个类,用来组装data

public class requestOrderData
{
    public List<skuListData> skuList;
    public string outOrderNo;
    public int totalAmount;
    public string payNotifyUrl;
    public orderEntrySchemaData orderEntrySchema;
}
public class skuListData
{
    public string skuId;
    public int price;
    public int quantity;
    public string title;
    public List<string> imageList;
    public int type;
    public string tagGroupId;
}
public class orderEntrySchemaData
{
    public string path;

    public string @params;
}

public void ProcessRequest(HttpContext context){
     requestOrderData requestOrder = new requestOrderData();
     List<skuListData> skuList = new List<skuListData>();
     orderEntrySchemaData orderEntrySchema = new orderEntrySchemaData();
     List<string> imageList = new List<string>();

     skuListData skuListData = new skuListData();

     skuListData.skuId = 商品号;
     skuListData.price = 价格;
     skuListData.quantity = 数量;
     skuListData.title = 商品标题;
     imageList.Add("订单图片");
     skuListData.imageList = imageList;
     skuListData.type = 看官方文档;
     skuListData.tagGroupId = 看官方文档;

     skuList.Add(skuListData);

     requestOrder.skuList = skuList;
     requestOrder.outOrderNo = out_order_no;
     requestOrder.totalAmount = total_amount;

     requestOrder.payNotifyUrl = "支付成功的回调URL";

     orderEntrySchema.path = "pages/index/watchVideo0";
     orderEntrySchema.@params = "{\"ID\":"+video.ID+"}";

     requestOrder.orderEntrySchema = orderEntrySchema;
        //requestOrder组装完成,接下来准备签名
     var ts = GetTimeStamp().ToString();//获取当前时间戳
     List<string> paramsDict = new List<string>();//按照官方文档进行组装
     paramsDict.Add("POST");
     paramsDict.Add("/requestOrder");
     paramsDict.Add(ts);
     paramsDict.Add(out_order_no);
     var sign = GetSign(paramsDict, requestOrder);//开始进行签名
    var data = JsonConvert.SerializeObject(paramsDict);

//然后把结果返回给前端即可
    context.Response.Write(JsonConvert.SerializeObject(new
    {
        requestOrder = JsonConvert.SerializeObject(requestOrder),
        sign = $"SHA256-RSA2048 appid=\"{appid}\",nonce_str=\"{out_order_no}\",timestamp=\"{ts}\",key_version=\"{1}\",signature=\"{sign}\""
    }));
}
public static long GetTimeStamp(bool isMillisecond = false)
{
    var ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
    var timeStamp = isMillisecond ? Convert.ToInt64(ts.TotalMilliseconds) :     
    Convert.ToInt64(ts.TotalSeconds); return timeStamp;
}
//获取签名的函数
private static string GetSign(List<string> data, requestOrderData data2)
{
    var signStr = "";
    foreach (var item in data)
    {
        signStr += item + "\n";
    }
    signStr += JsonConvert.SerializeObject(data2) + "\n";
    return GetS(signStr);
}
//继续计算
        private static string GetS(string sDataIn)
        {
            var privateKeyStr = @"-----BEGIN PRIVATE KEY-----
M.....这里填写你的私钥.......ul0rqAcEUdz+tAoGBAMwlik65msiaIF4kTUR+
ER7gS8lBPMosZeigi/2QLWDZw1OUIqjlwiQYB/A9M0J9q1bD3P5stwQtYLSk1W39
Qfk0mNN+NLVjhq04deYDLN1hDoUZLaRyTMXyiq3q1G9oR1nw7Vu5CvoBbvn3Xt+Z
QnDh5OhxO31I6O4gz4s9xba9
-----END PRIVATE KEY-----";
            // 将PEM格式的私钥字符串解析为RsaKeyParameters
            TextReader privateKeyTextReader = new StringReader(privateKeyStr);
            PemReader pemReader = new PemReader(privateKeyTextReader);
            RsaKeyParameters privateKeyParams = (RsaKeyParameters)pemReader.ReadObject();
            // 创建SHA256的签名器
            ISigner signer = SignerUtilities.GetSigner("SHA-256withRSA");

            // 使用私钥初始化签名器
            signer.Init(true, privateKeyParams);
            byte[] data = Encoding.UTF8.GetBytes(sDataIn);

            // 更新签名器的数据
            signer.BlockUpdate(data, 0, data.Length);

            // 计算签名
            byte[] signature = signer.GenerateSignature();

            // 将签名进行Base64编码
            string base64Signature = Convert.ToBase64String(signature);

            return base64Signature;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值