项目要求不同分公司客服支付到各个分公司商户,所以我决定使用服务商模式
首先
1、注册服务号(一定是服务号其他不行)
2、进入服务号申请服务商(完成认证)

3、管理员权限进入服务商添加特约商户号(即子商户号),完成认证(多少分公司添加多少子商户),
操蛋的是已有的商户号不能直接添加进来,还得重新再服务商户号里申请

4、特约商户号申请时可以直接绑定小程序appid
5、设置服务商户号API密钥

6、准备工作完成 惊心动魄的代码环节来了(php)

 public function paytwo(){$appid            = '';//服务号appid$mch_id           = '';//服务商商户号$sub_appid        = '';//小程序APPID$sub_mch_id       = ;//子商户号$openid           =//用户appid;$body             = ""; //这个自己写,微信订单里面显示的是商品名称$nonce_str        = $this->nonce_str();//随机字符串$notify_url       = '';//回调地址$out_trade_no     = $order->orderNo;//商户订单号$spbill_create_ip = '';//服务器IP$total_fee        =  $order->orderTotal*100;//因为充值金额最小是1 而且单位为分 如果是充值1元所以这里需要*100$trade_type       = 'JSAPI';//交易类型 默认//这里是按照顺序的 因为下面的签名是按照顺序 排序错误 肯定出错$post['appid']            = $appid;$post['body']             = $body;$post['mch_id']           = $mch_id;$post['nonce_str']        = $nonce_str; //随机字符串$post['notify_url']       = $notify_url;$post['out_trade_no']     = $out_trade_no;$post['spbill_create_ip'] = $spbill_create_ip; //终端的ip$post['sub_appid']        = $sub_appid;$post['sub_mch_id']       = $sub_mch_id;$post['sub_openid']           = $openid;$post['total_fee']        = $total_fee; //总金额 最低为一块钱 必须是整数$post['trade_type']       = $trade_type;$sign                     = $this->sign($post); //签名$post_xml = '<xml><appid>'.$appid.'</appid><body>'.$body.'</body><mch_id>'.$mch_id.'</mch_id><nonce_str>'.$nonce_str.'</nonce_str><notify_url>'.$notify_url.'</notify_url><out_trade_no>'.$out_trade_no.'</out_trade_no><spbill_create_ip>'.$spbill_create_ip.'</spbill_create_ip><sub_appid>'.$sub_appid.'</sub_appid><sub_mch_id>'.$sub_mch_id.'</sub_mch_id><sub_openid>'.$openid.'</sub_openid><total_fee>'.$total_fee.'</total_fee><trade_type>'.$trade_type.'</trade_type><sign>'.$sign.'</sign></xml> ';//统一接口prepay_id$url   = 'https://api.mch.weixin.qq.com/pay/unifiedorder';$xml   = $this->http_request($url,$post_xml);$array = $this->xml($xml);//全要大写//return $array;if($array['RETURN_CODE'] == 'SUCCESS' && $array['RESULT_CODE'] == 'SUCCESS'){$time = time();$tmp  = [];//临时数组用于签名//$tmp['appId']         = $appid;$tmp['appId']         = $sub_appid;$tmp['nonceStr']      = $nonce_str;$tmp['package']       = 'prepay_id='.$array['PREPAY_ID'];$tmp['signType']      = 'MD5';$tmp['timeStamp']     = "$time";$data['state']        = 1;$data['timeStamp']    = "$time";//时间戳$data['nonceStr']     = $nonce_str;//随机字符串$data['signType']     = 'MD5';//签名算法,暂支持 MD5$data['package']      = 'prepay_id='.$array['PREPAY_ID'];//统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*$data['paySign']      = $this->sign($tmp);//签名,具体签名方案参见微信公众号支付帮助文档;$data['out_trade_no'] = $out_trade_no;}else{$data['state']       = 0;$data['text']        = "错误";$data['RETURN_CODE'] = $array['RETURN_CODE'];$data['RETURN_MSG']  = $array['RETURN_MSG'];}return json_encode($data);
}//随机32位字符串private function nonce_str(){$result = '';$str = 'QWERTYUIOPASDFGHJKLZXVBNMqwertyuioplkjhgfdsamnbvcxz';for ($i=0;$i<32;$i++){$result .= $str[rand(0,48)];}return $result;}//签名 $data要先排好顺序private function sign($data){$stringA = '';foreach ($data as $key=>$value){if(!$value) continue;if($stringA) $stringA .= '&'.$key."=".$value;else $stringA = $key."=".$value;}$wx_key = '';//服务商key$stringSignTemp = $stringA.'&key='.$wx_key;//申请支付后有给予一个商户账号和密码,登陆后自己设置key//return $stringSignTemp;return strtoupper(md5($stringSignTemp));}//curl请求啊function http_request($url,$data = null,$headers=array()){$curl = curl_init();if(count($headers)>= 1){curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);}curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if(!empty($data)){curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, $data);}curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($curl);curl_close($curl);return $output;}//获取xmlprivate function xml($xml){$p = xml_parser_create();xml_parse_into_struct($p, $xml, $vals, $index);xml_parser_free($p);  $data = [];foreach ($index as $key=>$value){if($key == 'xml' || $key == 'XML') continue;$tag = $vals[$value[0]]['tag'];$value = $vals[$value[0]]['value'];$data[$tag] = $value;}return $data;}

7、然后小程序发起支付

var that = this;wx.request({//url: app.globalData.baseUrl+'/api/gopay',url: '/api/gopay',data: {oid:that.data.orderId},method: 'post',header: {'content-type': 'application/json'},success: function (res) {wx.requestPayment({'appId': '',//小程序appid'timeStamp': res.data.timeStamp,'nonceStr': res.data.nonceStr,'package': res.data.package,'signType': 'MD5','paySign': res.data.paySign,'success': function (res) {wx.request({url: app.globalData.baseUrl + '/api/udpateorderstatus',data: {oid: that.data.orderId,status: 2},method: 'post',header: {'content-type': 'application/json'},success: function (res) {}})//这里完成跳转},'fail': function (res) {if (res.errMsg == "requestPayment:fail cancel") {wx.showToast({title: '支付取消',duration: 1200})} else {wx.showToast({title: '支付失败',duration: 1200})}//支付失败console.log(res);},'complete': function (res) { }})}})OK 完成

php微信小程序服务商支付模式相关推荐

  1. php 小程序服务商支付模式

    不明白可以直接评论留言 详见微信支付-开发文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_sl_api.php?chapter=9_1 /*** @ ...

  2. 超级简单thinkphp微信小程序服务商分账。以及小程序普通支付,微信特约商户

    产品介绍 服务商分账,主要用于服务商帮助特约商户完成订单收单成功后的资金分配. 使用场景举例 1.服务商抽成 在各个行业中,服务商为特约商户提供增值服务,服务商与特约商户协商,可以从特约商户的交易流水 ...

  3. 微信小程序服务商下子商户支付下单接口

    微信小程序服务商下子商户支付下单流程 调用方法 <?php namespace app\index\controller; class WeixinPay extends Base { prot ...

  4. 微信小程序 iOS支付

    微信小程序运营支付规范 微信官方针对有虚拟支付功能的小程序下发了整改通知.截至5月8号,平台将对账号屏蔽iOS系统的支付接口调用.我去查了<<微信小程序运营规则>>,如上图.发 ...

  5. 微信小程序篇(微信小程序的支付)

    微信小程序的支付和微信公众号的支付是类似的,对比起来还比公众号支付简单了一些,我们只需要调用微信的统一下单接口获取prepay_id之后我们在调用微信的支付即可. 今天我们来封装一般node的支付接口 ...

  6. 微信小程序服务器支付sdk,微信小程序之支付后如何调用SDK的异步通知

    微信小程序之支付后如何调用SDK的异步通知 发布时间:2021-07-05 10:47:33 来源:亿速云 阅读:57 作者:小新 这篇文章主要介绍微信小程序之支付后如何调用SDK的异步通知,文中介绍 ...

  7. 微信小程序调用支付接口支付(tp5、小程序)

    微信小程序调用支付接口支付 今天记录一下学习的小程序调用微信支付接口 一.先理清一下调起微信支付的整个流程. 1.就是先调用微信的支付统一下单api获取到prepay_id 2.然后后端再将这个pre ...

  8. ios微信小程序虚拟支付解决办法

    ios微信小程序虚拟支付整理介绍 目前iOS端暂不支持虚拟支付,微信小程序虚拟支付仅涉及到ios端,安卓端不受影响. 小程序支付规范 https://developers.weixin.qq.com/ ...

  9. 微信小程序—微信小程序端支付代码

    只有微信小程序端的代码,如下 Page({data: {},onLoad: function (options) {// 页面初始化 options为页面跳转所带来的参数var that = this ...

最新文章

  1. x99芯片组服务器版叫什么,Intel X99主板、Z97主板以及H97主板的区别是什么?
  2. python byte和string转换
  3. python利器app-有了这个神器,轻松用 Python 写 APP !
  4. python 赋值重置_Python所有赋值语句快速预览
  5. Hybris UI的Route(路由)实现
  6. 【转载】汇编速查手册
  7. 基于神经网络的文本分类(基于Pytorch实现)
  8. python学习笔记 day20 常用模块(六)
  9. java.sql.SQLException: 关闭的连接 解决办法
  10. 从SQL到NoSQL再到NewSQL
  11. java datasource使用_java Datasource,数据库连接池
  12. 三对角矩阵的压缩存储
  13. 【概率】由已有的随机生成器构造出新的随机生成器
  14. 豆瓣读书TOP250书籍信息爬虫脚本
  15. ubuntu下深度启动盘制作工具
  16. MongoDB中的_id和ObjectId
  17. 3D目标检测框架综述(OpenPCDet、mmdet3d、Det3D、Paddle3D)
  18. ffmpeg视频转动图gif和Webp
  19. malloc()函数与free()函数的使用
  20. CodeForces - 348A E - Mafia

热门文章

  1. Mp4文件播放原理分析
  2. vb中利用xmlhttp来下载远程文件
  3. 云智能电销外呼系统,低成本解决中小企业销售难题
  4. 成都天瑞地安:零基础学Java最快捷的7个计划
  5. java学籍管理信息系统模板_java学籍管理系统051
  6. python编程语言介绍-编程语言及python介绍
  7. Spring框架之AOP详解(带实战详细步骤)
  8. vue打包静态文件名称不加hash值和不修改文件夹结构
  9. python自动化工具之pywinauto(三)
  10. 规范自己的JavaScript书写 – Dojo Javascript 编程规范