微信APP支付完整版

关于微信支付,网上太多例子,由于步骤比较繁琐,对于小白来说坑较多,现总结一下完整流程

1.首先要到微信开放平台创建移动应用,提交审核,通过后得到AppID和AppSecret

2.申请开发者资质认证。

3.申请微信支付

申请成功会收到邮件,包含商户号wxPay_mchId和密码,用这个登录商户平台,开通APP支付,同时在商户平台->账户设置->API安全里填写的密钥得到wxPay_partnerKey

自此需要用到的AppID,AppSecret,mchId,partnerKey,notifyUrl(后台网站地址,自己设置)都获取完成,可将其放到配置文件或数据库。下面进入正式代码:

1.用户点击生成订单,APP将信息提交后台,后台生成完整订单返回APP,APP显示订单

 PayOrder payOrder = new PayOrder();
            payOrder.cname = cname;
            payOrder.curUmno = curUmno;
            payOrder.thisPay = Convert.ToDecimal(thispay);
            payOrder.payType = payType;
            payOrder.orderStatus = 0;
            payOrder.orderNumber=WeiXinUtil.CreateNonce();//商户后台订单号,随机生成
            payOrder.tradeType=tradeType;
            payOrder.isDelete=0;
           // payOrder.transactionId=;微信订单号支付完成后台异步填写
            
            //payOrder.payDate支付完成后台异步填写
            //payOrder.bankType支付完成后台异步填写

2.用户点击付款,将信息提交后台,后台组件下单对象(付款信息有APP传入,配置信息从配置文件或数据库读取),至少包含以下10个参数:

            order.body
            order.appid 
            order.mch_id
            order.notify_url
            order.attach
            order.nonce_str
            order.out_trade_no
            order.total_fee
            order.spbill_create_ip
            order.trade_type

3.获取预支付订单id:getPrepay_id :string prepayid =getPrepay_id(order, pdd.getWxKey("wxPay_partnerKey"));//(wxPay_partnerKe重数据库或配置文件获取)

 /// <summary>
        /// 获取prepay_id
        /// </summary>
        public string getPrepay_id(Order order, string key)
        {
            string prepay_id = "";
            string post_data = getUnifiedOrderXML(order, key);
            string request_data = WeiXinUtil.PostXmlToUrl("https://api.mch.weixin.qq.com/pay/unifiedorder", post_data);
            SortedDictionary<string, string> requestXML = WeiXinUtil.GetInfoFromXml(request_data);
            foreach (KeyValuePair<string, string> k in requestXML)
            {
                if (k.Key == "prepay_id")
                {
                    prepay_id = k.Value;
                    break;
                }
            }
            return prepay_id;
        }

 //获取统一下单数据
        public static string getUnifiedOrderXML(Order order, string key)
        {
            string return_string = string.Empty;
 
            Dictionary<string, string> sParams = new Dictionary<string, string>();
            sParams.Add("appid", order.appid);
            sParams.Add("attach", order.attach);
            sParams.Add("body", order.body);
            sParams.Add("mch_id", order.mch_id);
            sParams.Add("nonce_str", order.nonce_str);
            sParams.Add("notify_url", order.notify_url);
            sParams.Add("out_trade_no", order.out_trade_no);
            sParams.Add("spbill_create_ip", order.spbill_create_ip);
            sParams.Add("total_fee", order.total_fee.ToString());
            sParams.Add("trade_type", order.trade_type);
            order.sign = CreateSign(sParams, key);
            sParams.Add("sign", order.sign);
 
            //拼接成XML请求数据
            StringBuilder sbPay = new StringBuilder();
            foreach (KeyValuePair<string, string> k in sParams)
            {
                if (k.Key == "attach" || k.Key == "body" || k.Key == "sign")
                {
                    sbPay.Append("<" + k.Key + "><![CDATA[" + k.Value + "]]></" + k.Key + ">");
                }
                else
                {
                    sbPay.Append("<" + k.Key + ">" + k.Value + "</" + k.Key + ">");
                }
   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值