WeChat Pay 환불 기능 개발

php中世界最好的语言
풀어 주다: 2018-03-16 13:42:24
원래의
10483명이 탐색했습니다.

이번에는 WeChat Pay 환불 기능 개발에 대해 알려드리겠습니다. WeChat Pay 환불 기능 개발에 대한 주의 사항은 무엇인가요? 실제 사례를 살펴보겠습니다.

우선, WeChat의 문서와 데모에 대해 불만을 토로합시다. 중요한 단계 정보가 명확하게 강조되지 않았고, .net 데모가 성공적으로 실행되지 않았습니다.

1. WeChat QR 코드를 스캔하여 로그인하세요

2. WeChat PC 결제

이 환불 기능을 사용하려면 많은 탐색이 필요했습니다. 다음은 WeChat 결제 환불 기능의 개발 단계를 소개합니다.

1. 인증서를 다운로드하여 시스템으로 가져옵니다.

WeChat 환불에는 인증서가 필요하지만 공식 데모에는 인증서가 필요합니다. api 보안 칼럼에서 다운로드한 인증서에 대해서는 공식 인증서 사용 예의 워드 문서에서 다음 단어를 볼 수 있습니다. C# 사용 외에 주의할 점이 하나 있습니다. 코드에서 apiclient_cert.p12를 사용하려면 1. 코드에서 사용하세요. 2. 둘 다 필수입니다. .NET 버전은 2.0보다 커야 합니다. 이전에는 이 두 단계를 몰랐고 너무 많은 시간을 낭비했습니다. 따라서 먼저 인증서를 다운로드하세요.

다운로드할 때 휴대폰 인증과 로그인 비밀번호가 필요합니다. 다운로드 후 인증서 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가 잘못된 경우 지정된 네트워크 비밀번호가 잘못되었다는 메시지가 표시됩니다.

다음으로 환불을 추가하세요. controller의 메서드. WeChat 주문 번호, 판매자 주문 번호, 총액 및 환불 금액이 포함됩니다. 판매자 주문 번호와 WeChat 주문 번호 중 하나를 선택하세요. 세부 매개변수

  public ActionResult DoRefund()
        {            string result = Refund.Run("","131667780120trade_no", "1", "1");            return Content(result);
        }
로그인 후 복사

환불 클래스의 실행 방법:

 /***
        * 申请退款完整业务流程逻辑
        * @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();
        }
로그인 후 복사

환불: 방법

 /**
        * 
        * 申请退款
        * @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년 이내에 거래에 대한 환불을 신청할 수 있다는 것입니다.

이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:

ss3의 그라데이션 사용 방법

jQuery, Angular, node

H5 비디오 재생 라이브러리 video.js의 Promise에 대한 자세한 설명

위 내용은 WeChat Pay 환불 기능 개발의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!