专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

字节跳动小程序收银台集成支付宝、微信支付

ins518 2024-11-27 15:16:11 技术文章 11 ℃ 0 评论

1.集成前需要在字节小程序中开通支付


2.开通后,需要对支付宝与微信进行配置,参考:

https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/api/open-interface/payment/mini-app-pay-plugin-reference/application-for-payment

3.商户后端接入

(1)用户在商户侧完成商品下单;

(2)商户后端调用微信 H5 支付 统一下单接口,获取调起微信 H5 支付的 URL。即统一下单接口返回的 mweb_url 字段值(商户如果不使用微信支付方式,则可忽略该步骤);

(3)商户后端生成调用支付宝 app 支付的签名订单信息,即为调起支付宝 app 支付的参数,详见 支付宝 App 支付请求参数说明(商户如果不使用支付宝支付方式,则可忽略该步骤);

(4)商户后端对调起小程序收银台的参数 orderInfo 进行签名(参考 服务端签名),返回给商户前端;

orderInfo 进行签名:

string splicestring = this.SpliceCharacter(pay_money, order_number, goods_name);//支付宝的支付签名(参考支付宝签名文档)
                            int GetTimeStampadd_time = GetTimeStamp(add_time);
                            int GetTimeStampVal = GetTimeStamp(DateTime.Now);

                            var dic = new Dictionary<string, dynamic>
                            {
                                {"merchant_id", DbConfig.bytepay.MCHID},  //字节小程序收银台的商户号
                                {"app_id",DbConfig.bytepay.AppID},   //字节小程序收银台的AppID
                                {"sign_type", "MD5"},
                                {"timestamp", GetTimeStampVal.ToString()},//发送请求的时间戳,精确到秒    
                                {"version", "2.0"},
                                {"trade_type", "H5"},
                                {"product_code","pay"},//
                                {"payment_type", "direct"},//              
                                {"out_order_no",order_number},//商户订单号
                                {"uid", uid}, 
                                {"total_amount",Convert.ToInt32(pay_money*100)},//金额,整型,单位:分(不能有小数) 
                                {"currency", "CNY"},
                                {"subject", goods_name},//商户订单名称
                                {"body", goods_name},//商户订单详情
                                {"trade_time", GetTimeStampadd_time.ToString()},//下单时间戳,精确到秒。如果两次支付(调用 tt.pay)传入的订单号(out_order_no)相同,则必须保证 trade_time 也相同。
                                {"valid_time", "7200"},//订单有效时间(单位 秒) 
                                {"notify_url", "https://tp-pay.snssdk.com/paycallback"},
                                {"wx_url", "https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx25161122572189727ea14cfd1832451500&package=2746219290"},//微信H5支付
                                {"wx_type", "MWEB"},
                                {"alipay_url",splicestring}, //支付宝的支付签名
                               
                            }; 
                            dic.Add("sign", GetSignString(dic)); 
                            dic.Add("risk_info", "{\"ip\":\"127.0.0.1\"}");


                            ht.Add("code", "200");
                            ht.Add("message", "成功");
                            ht.Add("data", dic);

辅助方法:

//获取时间戳
        private int GetTimeStamp(DateTime dt)
        {
            DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
            int timeStamp = Convert.ToInt32((dt - dateStart).TotalSeconds);
            return timeStamp;
        }

        //签名
        public string GetSignString(Dictionary<string, dynamic> dic)
        {
            string key =DbConfig.bytepay.AppSecret;
            //排序
            dic = dic.OrderBy(d => d.Key).ToDictionary(d => d.Key, d => d.Value);
            //连接字段
            var sign = dic.Aggregate("", (current, d) => current + (d.Key + "=" + d.Value + "&"));
            sign = sign.Trim('&')+ key;
            //MD5 
            sign = Basis_vic.ToMd5(sign);

            return sign;
        }

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表