Exemple #1
0
        /**
         *
         * 撤销订单,如果失败会重复调用10次
         * @param string out_trade_no 商户订单号
         * @param depth 调用次数,这里用递归深度表示
         * @return false表示撤销失败,true表示撤销成功
         */
        private bool Cancel(string out_trade_no, int depth = 0)
        {
            if (depth > 10)
            {
                return(false);
            }

            WeixinDataHelper reverseInput = new WeixinDataHelper(this._weixinKey);

            reverseInput.SetValue("out_trade_no", out_trade_no);
            WeixinDataHelper result = weixinPayApi.Reverse(reverseInput);

            //接口调用失败
            if (result.GetValue("return_code").ToString() != "SUCCESS")
            {
                return(false);
            }

            //如果结果为success且不需要重新调用撤销,则表示撤销成功
            if (result.GetValue("result_code").ToString() != "SUCCESS" && result.GetValue("recall").ToString() == "N")
            {
                return(true);
            }
            else if (result.GetValue("recall").ToString() == "Y")
            {
                return(Cancel(out_trade_no, ++depth));
            }
            return(false);
        }