Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="inputObj"></param>
        /// <param name="config"></param>
        /// <param name="url"></param>
        /// <param name="isUseCert"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public static async Task <WechatpayData> ExecuteAsync(WechatpayData inputObj, WechatpayConfig config, string url, bool isUseCert = false, int timeout = 6)
        {
            if (config == null || string.IsNullOrEmpty(config.AppId) || string.IsNullOrEmpty(config.MchId))
            {
                throw new Exception("收款账号配置不能为空");
            }
            if (string.IsNullOrEmpty(config.SignKey))
            {
                throw new Exception("密钥配置不能为空");
            }
            inputObj.SetValue("appid", config.AppId);                                      //公众账号ID
            inputObj.SetValue("mch_id", config.MchId);                                     //商户号
            inputObj.SetValue("nonce_str", GenerateNonceStr());                            //随机字符串
            inputObj.SetValue("sign_type", config.SignType);                               //签名类型
            inputObj.SetValue("sign", inputObj.MakeSign(config.SignType, config.SignKey)); //签名

            string response = await PostAsync(inputObj.ToXml(), url, isUseCert, timeout, config.CertPath, config.CertPassword);

            var result = new WechatpayData();

            //若接口调用失败会返回xml格式的结果
            if (response.Substring(0, 5) == "<xml>")
            {
                result.FromXml(response);
                if (result.GetValue("return_code").ToString() != WechatConstants.SUCCESS)
                {
                    throw new Exception(result.GetValue("return_msg").ToString());
                }
                //验证签名,不通过会抛异常
                result.CheckSign(config.SignType, config.SignKey);
            }
            //接口调用成功则返回非xml格式的数据
            else
            {
                result.SetValue("return_code", "SUCCESS");
                result.SetValue("return_msg", "");
                result.SetValue("result_code", "SUCCESS");
                result.SetValue("body", response);
            }

            return(result);
        }
Example #2
0
        /// <summary>
        /// 创建支付调起微信参数
        /// </summary>
        /// <param name="config"></param>
        /// <param name="prepay_id"></param>
        /// <param name="tradeType"></param>
        /// <param name="codeUrl"></param>
        /// <returns></returns>
        public static WechatpayData GetAppData(WechatpayConfig config, object prepay_id, string tradeType, string codeUrl)
        {
            if (config == null || string.IsNullOrEmpty(config.AppId) || string.IsNullOrEmpty(config.MchId))
            {
                throw new Exception("收款账号配置不能为空");
            }
            if (string.IsNullOrEmpty(config.SignKey))
            {
                throw new Exception("密钥配置不能为空");
            }
            var data = new WechatpayData();

            switch (tradeType)
            {
            case WechatConstants.APP:
                data.SetValue(WechatConstants.APPID.ToLower(), config.AppId);
                data.SetValue(WechatConstants.NONCESTR.ToLower(), HttpService.GenerateNonceStr());
                data.SetValue(WechatConstants.TIMESTAMP.ToLower(), (int)(DateTime.Now.ToUniversalTime().Ticks / 10000000 - 62135596800));
                data.SetValue(WechatConstants.PARTNERID, config.MchId);
                data.SetValue(WechatConstants.PREPAYID, prepay_id);
                data.SetValue(WechatConstants.PACKAGE.ToLower(), "Sign=WXPay");
                data.SetValue(WechatConstants.SIGN, data.MakeSign(config.SignType, config.SignKey));
                break;

            case WechatConstants.MWEB:
            case WechatConstants.JSAPI:
                data.SetValue(WechatConstants.APPID, config.AppId);
                data.SetValue(WechatConstants.NONCESTR, HttpService.GenerateNonceStr());
                data.SetValue(WechatConstants.TIMESTAMP, (int)(DateTime.Now.ToUniversalTime().Ticks / 10000000 - 62135596800));
                data.SetValue(WechatConstants.PACKAGE, "prepay_id=" + prepay_id);
                data.SetValue(WechatConstants.SIGNTYPE, config.SignType);
                data.SetValue(WechatConstants.PAYSIGN, data.MakeSign(config.SignType, config.SignKey));
                break;

            case WechatConstants.NATIVE:
                data.SetValue(WechatConstants.CODEURL, codeUrl);
                break;
            }
            return(data);
        }