设为首页 加入收藏

TOP

微信小程序支付(三)
2019-09-30 16:48:47 】 浏览:172
Tags:程序 支付
; + result.ToJson());
var packageStr = "prepay_id=" + result.prepay_id; //var cacheStrategy = CacheStrategyFactory.GetObjectCacheStrategyInstance(); //cacheStrategy.Set($"WxOpenUnifiedorderRequestData-{openId}", xmlDataInfo, TimeSpan.FromDays(4));//3天内可以发送模板消息 //cacheStrategy.Set($"WxOpenUnifiedorderResultData-{openId}", result, TimeSpan.FromDays(4));//3天内可以发送模板消息 return ToSuccess(data: new { result.prepay_id, appId = "小程序AppId", timeStamp, nonceStr, tradeId = sp_billno, package = packageStr, //signType = "MD5", paySign = TenPayV3.GetJsPaySign("小程序AppId", timeStamp, nonceStr, packageStr, "小程序支付key") }); } catch (Exception ex) { return ToError(msg: ex.Message); }

*** 这个接口 在什么地方用呢(A:在小程序客户端调用微信支付的时候需要用到【而且是必须的】,也就是下午的 小程序客户端调用:wx.requestPayment 的时候)

  4)回调地址(支付结果通知):

 

  *** 需要注意的地方已 标出了。(值得注意的就是这个地址必须是外网能访问到的)

  代码实现:

  public ActionResult InquiryNotify()
        {
            try
            {
                var resHandler = new ResponseHandler(null);
                var return_code = resHandler.GetParameter("return_code");

                var return_msg = resHandler.GetParameter("return_msg");
                if (return_code != "SUCCESS") return PayResultNotify();
                var attach = resHandler.GetParameter("attach");
                if (string.IsNullOrEmpty(attach)) return PayResultNotify();

                //这里请签名验证,并校验返回的订单金额是否与商户侧的订单金额一致

                var cost = resHandler.GetParameter("total_fee");//金额
                var tradeId = resHandler.GetParameter("out_trade_no");//商户订单号
                //验证支付状态与金额
       
              //业务逻辑处理,采用异步回调
                return PayResultNotify("SUCCESS", "OK");
            }
            catch (Exception ex)
            {        
                return PayResultNotify();
            }
        }

 private ActionResult PayResultNotify(string returnCode = "FAIL", string returnMsg = "wrong")
        {
            var xml = $@"<xml>
                       <return_code><![CDATA[{returnCode}]]></return_code>
                       <return_msg><![CDATA[{returnMsg}]]></return_msg>
                       </xml>";
            return Content(xml, "text/xml");
        }

  3.2、客户端实现(小程序)

  

/**
   * 支付
   */
  bindPay: function(e) {
    let that = this
    let url = wx.getStorageSync(config.domainName)
    url += '服务端接口地址'
    let data = {
      sessionId: wx.getStorageSync(config.sessionId),
      cost: "支付金额",
    }
    wxRequest.getRequest(url, data).then((res) => {
      if (res.data.success) {
        let payInfo = res.data.data
        wx.requestPayment({
          timeStamp: payInfo.timeStamp,
          nonceStr: payInfo.nonceStr,
          package: payInfo.package,
          paySign: payInfo.paySign,
          signType: 'MD5',
          success: function(res) {
          /*这里一定要注意,这里的方法有可能会不执行(支付完成后 用户在不点击 支付完成页面底部的“完成”按钮时 这里的方法是不会执行到的,因此这里请不要写业务逻辑代码)*/
            that.queryPayResult(payInfo.tradeId)
          },
          fail: function(res) {
        /*用户取消支付后 会执行这里的方面*/ that.payCancel(payInfo.tradeId) } }) }
else { app.showToast(res.data.msg) } }) }

  至此,小程序的支付就完成了。感谢 盛派网络 对微信相关接口的封装,用起来很方便

说明:

    1:如有疑问,可以与我取得联系

    2:已官方文档为主,很有可能过些时间后文档及SDK会发生变化

    3:官方文档已在上文中给出

    4:文章首发于公众号

    5:服务端使用的小程序包是盛派的SDK(https://weixin.senparc.com)GitHub:https://github.com/Senparc/WeiXinMPSDK

    6:.Net Core 类似,有何疑问也可以与我取得联系

  如果对您有帮助,点个推荐呗!

  

 

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇(七十五)c#Winform自定义控件-.. 下一篇微信小程序支付

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目