사용자 인터페이스로의 엔터프라이즈 전송 활성화

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

이번에는 사용자 인터페이스로의 엔터프라이즈 전송 활성화에 대해 안내해 드리겠습니다. 엔터프라이즈 사용자 인터페이스로의 전송 활성화를 위한 주의 사항은 무엇입니까?

WeChat 공식 계정 결제 API에는 그러한 인터페이스가 없습니다. 기업이 사용자에게 송금을 해야 하거나 사용자가 현금 인출을 허용하거나 빨간 봉투를 보내야 하는 경우 등이 필요합니다. 가맹점 플랫폼 상품센터에서 별도로 오픈 예정입니다.

1. 기능 활성화

활성화는 단 한 번의 클릭으로 매우 간단합니다. 다만, 사용자에게 이체를 지원하는 계정과 사용자로부터 결제를 받는 계정은 동일하지 않다는 점에 유의하시기 바랍니다. 이 기능을 충족하려면 먼저 Tenpay로 충전해야 합니다. -충전) .

2. 인증서 다운로드

인증서는 계정 센터 - API 보안에서 다운로드됩니다. 이제 휴대폰

인증 코드와 판매자 플랫폼 로그인 비밀번호가 필요합니다. 다운로드 후 Windows에 설치하세요. 설치 비밀번호는 판매자 번호입니다.

설치 후 다음 단계의 코드에서 확인을 위해 인증서를 웹사이트 디렉토리에 배치하세요.

3. Transfer

현재 WeChat에서 제공하는 데모에는 이 부분이 포함되어 있지 않습니다. 공식 데모를 기반으로 몇 가지 수정하겠습니다. 이전 예와 유사하게 매개변수를 조작하려면 WxPayData 개체를 사용해야 합니다. TransfersPay 객체를 정의합니다.

  public class TransfersPay
    {        public string openid { get; set; }        public int amount { get; set; }        public string partner_trade_no { get; set; }        public string re_user_name { get; set; }        public string spbill_create_ip { get; set; }        public WxPayData GetTransfersApiParameters()
        {
            WxPayData apiParam = new WxPayData();
            apiParam.SetValue("partner_trade_no", partner_trade_no);
            apiParam.SetValue("openid", openid);
            apiParam.SetValue("check_name", "NO_CHECK");
            apiParam.SetValue("amount", amount);
            apiParam.SetValue("desc", "提现");
            apiParam.SetValue("spbill_create_ip", spbill_create_ip);
            apiParam.SetValue("re_user_name", re_user_name);            return apiParam;
        }
    }
로그인 후 복사
공식 데모의 WxpayApi에는 이미 관련 공식 계정 결제 방법이 포함되어 있습니다. 돈을 이체하려면 다른 Transfers 방법을 추가하세요.

 public static WxPayData Transfers(WxPayData inputData, int timeOut = 6)
        {            var url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
            inputData.SetValue("mch_appid", WxPayConfig.APPID);//公众账号ID
            inputData.SetValue("mchid", WxPayConfig.MCHID);//商户号
            inputData.SetValue("nonce_str", WxPayApi.GenerateNonceStr());//随机字符串
            inputData.SetValue("sign", inputData.MakeSign());//签名
            string xml = inputData.ToXml();            var start = DateTime.Now;
            string response = HttpService.Post(xml, url, true, timeOut);            // Portal.MVC.Logger.Info("WxPayApi"+ "UnfiedOrder response : " + response);
            var end = DateTime.Now;            int timeCost = (int)((end - start).TotalMilliseconds);
            WxPayData result = new WxPayData();
            result.FromXml(response);
            ReportCostTime(url, timeCost, result);//测速上报
            return result;
        }
로그인 후 복사
주의해야 할 점은 여러 기본 매개변수의 이름이 appid 및 mch_id와 같은 다른 방법과 다르다는 것입니다. 전송에서는 mch_appid와 mchid이고, 빨간 봉투에서는 wxappid와 mch_id라고도 합니다. 그런 다음 httpService.post 메소드의 세 번째 매개변수가 true인지 확인하십시오. 즉, 인증서가 사용됩니다. 게시 방법을 입력하면 다음을 볼 수 있습니다.

         //是否使用证书
                if (isUseCert)
                {                    string path = HttpContext.Current.Request.PhysicalApplicationPath;                    X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);
                    request.ClientCertificates.Add(cert);
                    Log.Debug("WxPayApi", "PostXml used cert");
                }
로그인 후 복사
여기서 인증서의 경로와 비밀번호가 사용되며 비밀번호는 판매자 번호입니다. 모든 것이 준비되면 컨트롤러에서 돈을 이체할 수 있습니다.

     [LoginValid]        public ActionResult CashTransfers(string orderNumber)
        {            //var order = new Order(){Amount = 1};           // var openid = "oBSBmwQjqwjfzQlKsFNjxFLSixxx";
            var user = _workContext.CurrentUser;            var order = _paymentService.GetOrderByOrderNumber(orderNumber);            var transfer = new TransfersPay
            {
                openid = user.OpenId,
                amount = (int) order.Amount*100,
                partner_trade_no = order.OrderNumber,
                re_user_name = "stoneniqiu",
                spbill_create_ip = _webHelper.GetCurrentIpAddress()
            };            var data = transfer.GetTransfersApiParameters();            var result = WxPayApi.Transfers(data);            return Content(result.ToPrintStr());
        }
로그인 후 복사
결과 가져오기

이렇게 하면 이체/출금 기능이 구현됩니다.

Release

공식적인 환경에서는 먼저 자체 주문을 생성한 다음 WeChat으로 전송을 요청하고 성공한 후 주문을 처리해야 합니다. CashTransfers 방식이 약간 조정되었습니다.

       [LoginValid]        public ActionResult CashTransfers(string orderNumber)
        {
            var user = _workContext.CurrentUser;            var order = _paymentService.GetOrderByOrderNumber(orderNumber);            if (string.IsNullOrEmpty(user.OpenId))
            {                return Json(new PortalResult("请用微信登录!"));
            }            if (order == null || order.OrderState != OrderState.Padding)
            {                return Json(new PortalResult("订单有误!"));
            }            
            var transfer = new TransfersPay
            {
                openid = user.OpenId,
                amount = (int) order.Amount*100,
                partner_trade_no = order.OrderNumber,
                re_user_name = "stoneniqiu",
                spbill_create_ip = _webHelper.GetCurrentIpAddress()
            };            var data = transfer.GetTransfersApiParameters();            var result = WxPayApi.Transfers(data);            if (result.GetValue("result_code").ToString() == "SUCCESS")
            {                return Json(new PortalResult(true, "提现成功"));
            }            return Json(new PortalResult(false, result.GetValue("return_msg").ToString()));            
        }
로그인 후 복사
또 한 가지 주의할 점은 게시 후에는 항상 작업 시간 초과 오류가 발생한다는 점입니다. 시간 초과를 30초로 변경하는 것이 좋습니다. 기본 6초는 시간 초과가 발생하기 쉽습니다. 함께 주문할 때도 마찬가지입니다.

 public static WxPayData Transfers(WxPayData inputData, int timeOut = 30)
로그인 후 복사
비즈니스 계좌의 돈이 없어지면 다음과 같은 메시지가 나타납니다.

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

추천 도서:

웹팩 자동 새로 고침 및 구문 분석 사용

H5 캐시 매니페스트 사용


위 내용은 사용자 인터페이스로의 엔터프라이즈 전송 활성화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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