WeChat Payの返金手順を詳しく解説

Y2J
リリース: 2017-04-27 13:44:19
オリジナル
8515 人が閲覧しました

まず、WeChat のドキュメントとデモについて不満を言いましょう。重要なステップ情報が明確に強調されておらず、.net デモが正常に実行されていません。

1. WeChat QR コードをスキャンしてログインします

2. WeChat PC 側で支払います

この返金機能を通過するには、かなりの模索が必要でした。以下は WeChat 支払い返金機能の開発手順の紹介です:

1. 証明書をダウンロードしてシステムにインポートします

WeChat 返金には証明書が必要です。この証明書は公式デモの証明書ではありません。 API セキュリティ列からダウンロードした証明書については、公式証明書の使用例の Word 文書で次の文を確認できます: C# の使用に加えて、注意すべき点が 1 つあります。コード内で apiclient_cert.p12 を使用するには、1. コード内で証明書を使用する必要があります。どちらも必須です。 .NET バージョンは 2.0 以降である必要があります 私はこれら 2 つの手順を以前は知らなかったので、多くの時間を無駄にしました。したがって、最初に証明書をダウンロードします:

ダウンロードするときは、携帯電話認証とログインパスワードが必要です。ダウンロード後、証明書

apiclient_cert.p12 を見つけてダブルクリックしてインポートします。インポートする際、このパスワードは販売者 ID であり、独自の販売者プラットフォームにダウンロードした証明書である必要があります。 。それ以外の場合は、パスワード エラー プロンプトが表示されます:

正しいプロンプトをインポートします:

2. コードの払い戻し

ここで公式デモのコードを直接使用できます。デモをダウンロードするには

が必要です。 WxPayConfig を変更するには、次のパラメータを使用します:

      public const string APPID = "wxf6dd794bcexxxx";        public const string MCHID = "xxxx";        public const string KEY = "xxxxx849ba56abbe56e05xxxxx";        public const string APPSECRET = "---";        //=======【证书路径设置】===================================== 
        /* 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要)        */
        public const string SSLCERT_PATH = "/WxPayAPI/cert/apiclient_cert.p12";        public const string SSLCERT_PASSWORD = "131xxxx";
ログイン後にコピー

上記の SSLCERT_PASSWORD は販売者 ID である MCHID です。SSLCERT_PASSWORD が間違っている場合は、指定されたネットワーク パスワードが間違っているというプロンプトが表示されます:

次に、返金を追加します。 WeChat 注文番号、販売者注文番号、合計金額、返金金額などのメソッドをコントローラーに送信します。販売者注文番号または WeChat 注文番号のいずれかを選択します。詳細パラメータ

  public ActionResult DoRefund()
        {            string result = Refund.Run("","131667780120trade_no", "1", "1");            return Content(result);
        }
ログイン後にコピー

Refund クラスの実行メソッド:


 /***
        * 申请退款完整业务流程逻辑
        * @param transaction_id 微信订单号(优先使用)
        * @param out_trade_no 商户订单号
        * @param total_fee 订单总金额
        * @param refund_fee 退款金额
        * @return 退款结果(xml格式)        */
        public static string Run(string transaction_id, string out_trade_no, string total_fee, string refund_fee)
        {
            Logger.Info("Refund is processing...");

            WxPayData data = new WxPayData();            if (!string.IsNullOrEmpty(transaction_id))//微信订单号存在的条件下,则已微信订单号为准            {
                data.SetValue("transaction_id", transaction_id);
            }            else//微信订单号不存在,才根据商户订单号去退款            {
                data.SetValue("out_trade_no", out_trade_no);
            }

            data.SetValue("total_fee", int.Parse(total_fee));//订单总金额
            data.SetValue("refund_fee", int.Parse(refund_fee));//退款金额
            data.SetValue("out_refund_no", out_trade_no);//随机生成商户退款单号
            data.SetValue("op_user_id", WxPayConfig.MCHID);//操作员,默认为商户号
            WxPayData result = WxPayApi.Refund(data);//提交退款申请给API,接收返回数据
            Logger.Info("Refund process complete, result : " + result.ToXml());            return result.ToPrintStr();
        }
ログイン後にコピー

Refund: メソッド

 /**
        * 
        * 申请退款
        * @param WxPayData inputObj 提交给申请退款API的参数
        * @param int timeOut 超时时间
        * @throws WxPayException
        * @return 成功时返回接口调用结果,其他抛异常        */
        public static WxPayData Refund(WxPayData inputObj, int timeOut = 6)
        {            string url = "https://api.mch.weixin.qq.com/secapi/pay/refund";            //检测必填参数
            if (!inputObj.IsSet("out_trade_no") && !inputObj.IsSet("transaction_id"))
            {                throw new WxPayException("退款申请接口中,out_trade_no、transaction_id至少填一个!");
            }            else if (!inputObj.IsSet("out_refund_no"))
            {                throw new WxPayException("退款申请接口中,缺少必填参数out_refund_no!");
            }            else if (!inputObj.IsSet("total_fee"))
            {                throw new WxPayException("退款申请接口中,缺少必填参数total_fee!");
            }            else if (!inputObj.IsSet("refund_fee"))
            {                throw new WxPayException("退款申请接口中,缺少必填参数refund_fee!");
            }            else if (!inputObj.IsSet("op_user_id"))
            {                throw new WxPayException("退款申请接口中,缺少必填参数op_user_id!");
            }

            inputObj.SetValue("appid", WxPayConfig.APPID);//公众账号ID
            inputObj.SetValue("mch_id", WxPayConfig.MCHID);//商户号
            inputObj.SetValue("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));//随机字符串
            inputObj.SetValue("sign", inputObj.MakeSign());//签名
            
            string xml = inputObj.ToXml();            var start = DateTime.Now;

            Log.Debug("WxPayApi", "Refund request : " + xml);            string response = HttpService.Post(xml, url, true, timeOut);//调用HTTP通信接口提交数据到API
            Log.Debug("WxPayApi", "Refund response : " + response);            var end = DateTime.Now;            int timeCost = (int)((end - start).TotalMilliseconds);//获得接口耗时            //将xml格式的结果转换为对象以返回
            WxPayData result = new WxPayData();
            result.FromXml(response);

            ReportCostTime(url, timeCost, result);//测速上报
            return result;
        }
ログイン後にコピー

本番環境では必ず独自のパラメータに変更してください。パラメータが正しい場合は、次が返されます:

さらに、WeChat はすぐに返金通知を受け取ります:

概要: 実際、パラメータとプロセスが一致していれば、この時点で返金機能は機能しています。 WeChat のルールは非常にシンプルで、1 年以内の取引については返金を申請できるというものです。しかし、別の疑問があります。証明書を仮想空間にインポートするにはどうすればよいですか、それともクラウドを変更する必要があるのでしょうか?

以上がWeChat Payの返金手順を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート