コード例 #1
0
        public WeiXinRefundResponse Refund(WeiXinRefundRequest request)
        {
            SortedDictionary <String, String> param = new SortedDictionary <String, String>();
            String noncestr = CommonUtil.CreateNoncestr();

            param.Add("appid", appid);
            param.Add("mch_id", Config.PartnerId);
            param.Add("nonce_str", noncestr);
            if (isSubCommercial)
            {
                if (Config.IsMiniAppPay)
                {
                    param.Add("sub_appid", Config.AppId);
                }
                param.Add("sub_mch_id", Config.SubPartnerId);
            }
            param.Add("out_trade_no", request.OutTradeNO);
            param.Add("transaction_id", request.TransactionID);
            param.Add("out_refund_no", request.RefundNO);
            param.Add("total_fee", request.PayAmount.ToString());
            param.Add("refund_fee", request.RefundPayAmount.ToString());
            String tmpPackageStr = CommonUtil.CreateLinkString(param);
            String signValue     = CommonUtil.Sign(tmpPackageStr, Config.PartnerKey).ToLower();

            param.Add("sign", signValue);

            X509Certificate2 cert = new X509Certificate2(Config.CertFilePath, Config.PartnerId, X509KeyStorageFlags.MachineKeySet);

            String tmpRes    = HttpRequestUtil.Send("POST", RefundUrl, CommonUtil.ArrayToXml(param), 60, cert);
            var    tmpResult = XmlToDic(tmpRes);

            WeiXinRefundResponse res = new WeiXinRefundResponse();

            if (tmpResult["return_code"] == Fail)
            {
                return(new WeiXinRefundResponse
                {
                    RetCode = Fail,
                    RetMsg = tmpResult["return_msg"]
                });
            }

            var tmpSignResult = CommonUtil.FilterPara(tmpResult);

            if (!IsMD5Sign(tmpSignResult, tmpResult["sign"]))
            {
                return(new WeiXinRefundResponse
                {
                    RetCode = Fail,
                    RetMsg = "签名验证失败"
                });
            }

            if (tmpResult["result_code"] == Fail)
            {
                var errMsg = "";
                if (!tmpResult.TryGetValue("err_code_des", out errMsg))
                {
                    errMsg = GetErrMsg(tmpResult["err_code"]);
                }

                return(new WeiXinRefundResponse
                {
                    RetCode = Fail,
                    RetMsg = errMsg
                });
            }

            return(new WeiXinRefundResponse
            {
                RetCode = "0",
                RefundTime = DateTime.Now,
                OrderNO = tmpResult["out_trade_no"],
                TransactionID = tmpResult["transaction_id"],
                RefundNO = tmpResult["out_refund_no"],
                RefundId = tmpResult["refund_id"],
                RefundAmount = decimal.Parse(tmpResult["refund_fee"]) / 100
            });
        }
コード例 #2
0
ファイル: WeiXinHandler.cs プロジェクト: gonghaimin/weixin
        public override RefundResponse Refund(RefundRequest request)
        {
            WeiXinRefundRequest tmp = request as WeiXinRefundRequest;

            return(weixin.Refund(tmp));
        }