微信小程序调用支付接口支付

今天记录一下学习的小程序调用微信支付接口
一、先理清一下调起微信支付的整个流程。
1、就是先调用微信的支付统一下单api获取到prepay_id
2、然后后端再将这个prepay_id组装好数据,发送个小程序
3、小程序根据这个数据包调起微信支付
wx.requestPayment(
{
‘timeStamp’: ‘’,
‘nonceStr’: ‘’,
‘package’: ‘’,
‘signType’: ‘MD5’,
‘paySign’: ‘’,
‘success’:function(res){},
‘fail’:function(res){},
‘complete’:function(res){}
})

二、后端的tp5操作

public function pay(){$this->checkOrderValid();$order = new Order();$status = $order->checkOrderStock($this->orderID);if (!$status['pass']){return $status;}return $this->makeWxPreOrder($status['orderPrice']);//        $this->checkProductStock();}// 构建微信支付订单信息private function makeWxPreOrder($totalPrice){$openid = Token::getCurrentTokenVar('openid');if (!$openid){throw new TokenException();}$wxOrderData = new \WxPayUnifiedOrder();$wxOrderData->SetOut_trade_no($this->orderNo);  //商户订单号,后续看看怎么生成的!$wxOrderData->SetTrade_type('JSAPI');   //交易类型$wxOrderData->SetTotal_fee($totalPrice * 100);  //订单金额$wxOrderData->SetBody('零食商贩');  //商品描述$wxOrderData->SetOpenid($openid);   //用户id$wxOrderData->SetNotify_url(config('secure.pay_back_url'));     //微信回调通知地址return $this->getPaySignature($wxOrderData);}//向微信请求订单号并生成签名private function getPaySignature($wxOrderData){$wxOrder = \WxPayApi::unifiedOrder($wxOrderData);// 失败时不会返回result_codeif($wxOrder['return_code'] != 'SUCCESS' || $wxOrder['result_code'] !='SUCCESS'){Log::record($wxOrder,'error');Log::record('获取预支付订单失败','error');
//            throw new Exception('获取预支付订单失败');}$this->recordPreOrder($wxOrder);$signature = $this->sign($wxOrder);return $signature;}private function recordPreOrder($wxOrder){// 必须是update,每次用户取消支付后再次对同一订单支付,prepay_id是不同的OrderModel::where('id', '=', $this->orderID)->update(['prepay_id' => $wxOrder['prepay_id']]);}// 签名private function sign($wxOrder){$jsApiPayData = new \WxPayJsApiPay();$jsApiPayData->SetAppid(config('wx.app_id'));$jsApiPayData->SetTimeStamp((string)time());$rand = md5(time() . mt_rand(0, 1000));$jsApiPayData->SetNonceStr($rand);$jsApiPayData->SetPackage('prepay_id=' . $wxOrder['prepay_id']);$jsApiPayData->SetSignType('md5');$sign = $jsApiPayData->MakeSign();$rawValues = $jsApiPayData->GetValues();$rawValues['paySign'] = $sign;unset($rawValues['appId']);return $rawValues;}/*** @return bool* @throws OrderException* @throws TokenException*/private function checkOrderValid(){$order = OrderModel::where('id', '=', $this->orderID)->find();if (!$order){throw new OrderException();}
//        $currentUid = Token::getCurrentUid();if(!Token::isValidOperate($order->user_id)){throw new TokenException(['msg' => '订单与用户不匹配','errorCode' => 10003]);}if($order->status != 1){throw new OrderException(['msg' => '订单已支付过啦','errorCode' => 80003,'code' => 400]);}$this->orderNo = $order->order_no;return true;}

然后后台完成上面的操作后,就将数据包(存放了prepay_id的包)发送到了小程序。
三、小程序就调起支付

四、支付成功与失败就会先在小程序里回调。 然后微信服务器会异步通知我们的一开始填写的路劲:notify_url 参数,然后我们后台就修改订单状态。

微信小程序调用支付接口支付(tp5、小程序)相关推荐

  1. Java程序调用MATLAB接口

    Java程序调用MATLAB接口 文章目录 Java程序调用MATLAB接口 一.注意事项 二.环境安装 三.MATLAB如何生成JAR包 四.MATLAB生成的JAR包如何引入到Java程序中 五. ...

  2. 小程序---调用后端接口的方法

    小程序---调用后端接口的方法 学习小程序一段时间了,写页面对我来说没有任何问题.最近学习如何请求后端接口,本来想请求项目中正在用的接口,可是无缘,微信小程序不允许.官方给出的提示是,接口必须有域名且 ...

  3. 微信小程序调用PHP接口,微信小程序调用PHP后台接口教程

    微信小程序调用PHP后台接口,解析纯html文本,效果图片预览 1.微信js动态传参: wx.request({ url: 'https://m.****.com/index.php/Home/Xia ...

  4. abc云支付php,凉秋易支付,免签约支付平台,彩虹易支付,abc云支付云钱包,云支付,云结算,支付接口,支付营销,易支付,微信支付,支付宝,QQ钱包,个人支付接口,免签支付接口...

    支付接口介绍 使用此接口可以实现支付宝.QQ钱包.微信支付与财付通的即时到账,免签约,无需企业认证.接口API地址是:http://pay.lqan.cn/ 本文阅读对象:商户系统(在线购物平台.人工 ...

  5. 小程序服务器api接口,百度智能小程序API 开放接口

    登录 智能小程序可以通过百度官方提供的登录能力方便地获取百度提供的用户身份标识,快速建立智能小程序内的用户体系. 流程说明 1.调用 swan.login() 获取 临时登录凭证code ,并回传到开 ...

  6. 微信小程序—调用imgSecCheck接口实现多张图片鉴黄,敏感过滤

    之前写过单张图片调用微信小程序-智能鉴黄.敏感识别的文章,突然有客户要求批量上传图片时实现这个功能,以为很简单,结果发现还是有很大差别的. 效果如下: 体验路径: 客户端代码: // miniprog ...

  7. 微信小程序 调用地图接口,实现定位

    1. demo01.wxml <!-- 定位 --> <view><button type="default" bindtap="get_l ...

  8. 微信小程序调用后端接口

    wx.request var data = {name:'小张爱敲代码' } wx.request({url: '',data: datasuccess(res) {conso.log(res)}})

  9. 微信小程序调用python分析图片_小帅丶干货之图像识别在微信小程序展示

    第一步肯定是去http://ai.baidu.com 注册账号,登陆并注册创建应用. http://ai.baidu.com/docs#/Begin/top 具体操作就看百度给出的文档即可很详细的哦. ...

最新文章

  1. Spring事务管理 与 SpringAOP
  2. javascript中break和continue
  3. numpy添加元素_科研速递 | 花费15年众望所归!NumPy论文终登上Nature!
  4. 【译】Introduction to Byteball — Part 2: The DAG
  5. Python 日志模块Loguru的使用
  6. 分布式的客户端-服务器结构_MMORPG游戏服务器技术选型参考
  7. POJ - 3278 Catch That Cow 简单搜索
  8. python scikit_如何将Scikit学习Python库用于数据科学项目
  9. 【报告分享】见实私域流量白皮书:私域流量案例实操手册.pdf
  10. 家庭的和谐稳定由什么决定?
  11. 2021年,开发者们如何拥抱 5G 消息?
  12. JSK-12 最后一个单词的长度【入门】
  13. 多元函数(multivariate function)分析(方向导数和梯度)
  14. C#中方法参数的传递方式: 值类型(默认),ref类型,out类型和params类型
  15. array 删除指定的元素的方法
  16. java se11.0.1安装_jdk11下载安装及环境变量配置
  17. 5S管理活动的实施和运行方案
  18. 回望2019,觅见2020
  19. 卡内基梅隆大学计算机专业录取难,卡内基梅隆大学申请难度分析
  20. jQuery 任意公历转为农历

热门文章

  1. 骁龙695和骁龙750g哪个好
  2. word2vec的pytorch实现
  3. 点云深度学习系列博客(二): 点云配准网络PCRNet
  4. NSDP协议PORTAL服务器源码
  5. python 爬虫 短信验证码
  6. JAVA系统之间通信方式总结
  7. 感谢、感恩与CSDN结缘的第1498天
  8. gitlab版本升降级
  9. php 屏蔽鼠标右键 复制,FLEX屏蔽鼠标右键
  10. baidumap api MySQL_百度地图API