这里写自定义目录标题

    • 快手接入流程
  • 快手微信支付
    • 签名快手
  • 获取微信H5支付url
    • 支付签名
    • 组装xml
    • postcurl请求
    • 解析xml
    • unit时间戳

快手接入流程

添加链接描述

快手微信支付

public function get_pay_kuaishou(){$price =100;$nonce_str = "1234556nnnn";//支付单号$wxurl = $this->wxpay($nonce_str, $price);if ($wxurl['status'] == 0) {return $this->jsonData(0, $wxurl['msg']);}$time = $this->get_total_millisecond();//下单时间 unix 时间戳戳,精确到毫秒$arr  = ['app_id'       => "ks********", //快手appid'sign_type'    => 'MD5', //定死的别动!!!'timestamp'    => strval($time), //需要为字符串类型的时间戳'version'      => '1.0', //定死的别动!!!'trade_type'   => 'H5', //定死的别动!!!'product_code' => 'pay', //定死的别动!!!'out_order_no' => strval($nonce_str), //自定义的订单号'total_amount' => $price  * 100, //金额 这里单位:分'currency'     => 'CNY', //定死的别动!'subject'      => "快手商家支付", //之前定好的标题'body'         => "快手商家支付", //之前定好的内容'trade_time'   => strval($time), //一定要和 上面的 timestamp 字段相同'valid_time'   => '60', //测试留的时间长];$arr['wx_url']  = $wxurl['arr']['MWEB_URL'];$arr['wx_type'] = "MWEB";$stringToBeSigned = $this->getSignContent($arr); //这里待签名处理.方法下面$sign = md5($stringToBeSigned . $ksxcx['zj_secret']);//这生成签名咯, 不要乱, 签名好多的//这两个字段的写入原因: 在待签名字符串 getSignContent 方法中不能有 sign和risk_info 所以在生成签名($sign)之后写入到里面$arr['sign']      = $sign;$arr['risk_info'] = json_encode(['ip' => request()->ip()]);//这两个字段的写入原因: 在待签名字符串  getSignContent 方法中不能有 sign和risk_info 所以在生成签名($sign)之后写入到里面$res = json_encode($arr);//这里html的编译解析, 防止html编译return $this->jsonData(1, "请求成功", ["orderInfo" => $res]);}

签名快手

public function getSignContent($params, $charset = 'utf-8'){ksort($params);$stringToBeSigned = "";$i                = 0;foreach ($params as $k => $v) {if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) {// 转换成目标字符集$v = $this->characet($v, $charset);if ($i == 0) {$stringToBeSigned .= "$k" . "=" . "$v";} else {$stringToBeSigned .= "&" . "$k" . "=" . "$v";}$i++;}}unset($k, $v);return $stringToBeSigned;}

获取微信H5支付url

/*** 微信WEb支付* @Author   yangcz* @DateTime 2021-02-03T16:45:40+0800* @param    [type]                   $nonce_str [支付单号]* @param    [type]                   $price     [支付金额]* @return   [type]                              [description]*/
public function wxpay($nonce_str, $price){$body = "快手商家支付”; //这个自己写,微信订单里面显示的是商品名称$notify_url       = http://www.test.com/index.php/api/weixinpay/notify_url; //回调地址$out_trade_no     = $nonce_str; //商户订单号$spbill_create_ip = "127.0.0.1"; //服务器IP$total_fee        = $price * 100; //因为充值金额最小是1 而且单位为分 如果是充值1元所以这里需要*100$trade_type     = 'MWEB'; //交易类型 默认$post['appid']  =  "wx********25";//微信appid$post['mch_id'] = 15******71;//微信商户号$post['body']             = $body;$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['total_fee']  = $total_fee; //总金额 最低为一块钱 必须是整数$post['trade_type'] = $trade_type;$wxpay_privatekey = "Ch*********************388";//微信支付秘钥$sign         = $this->sign($post, $this->zjtd['wxpay_privatekey']); //签名$post['sign'] = $sign;//组成xml$post_xml = $this->arrayToXml($post);//统一接口prepay_id$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';$xml = $this->http_request($url, $post_xml);$array = $this->xml($xml); //全要大写// dump($array);if ($array['RETURN_CODE'] == 'SUCCESS' && $array['RESULT_CODE'] == 'SUCCESS') {return ['status' => 1, 'arr' => $array];} else {$data['state']       = 0;$data['text']        = "错误";$data['RETURN_CODE'] = $array['RETURN_CODE'];$data['RETURN_MSG']  = $array['RETURN_MSG'];return ['status' => 0, 'msg' => "支付吊起失败:" . $array['RETURN_MSG']];}}

支付签名

//签名 $data要先排好顺序

 public function sign($data, $wx_key){ksort($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));}

组装xml

 public function arrayToXml($arr){$xml = "<xml>";foreach ($arr as $key => $val) {if (is_numeric($val)) {$xml .= "<" . $key . ">" . $val . "</" . $key . ">";} else {$xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";}}$xml .= "</xml>";return $xml;}

postcurl请求

//curl请求啊public 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;}

解析xml

//获取xmlpublic 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;}

unit时间戳

/**返回字符串的毫秒数时间戳*/
function get_total_millisecond()
{$time  = explode(" ", microtime());$time  = $time[1] . ($time[0] * 1000);$time2 = explode(".", $time);$time  = $time2[0];return $time;
}

php快手小程序微信H5支付相关推荐

  1. java整合快手小程序(登陆,支付,结算,退款,手机号授权登陆)

    快手小程序官方文档 快手小程序官网地址 快手小程序后台配置回调域名 代码部分 KSUrlConstants(请求地址常量) 商品类目编号根据业务自行替换 package com.dfjs.consta ...

  2. .NET 小程序微信用户支付

    微信支付有两种模式:微信用户主动发起的支付.签约委托支付协议后自动支付. 自动支付又分为两种:首次支付时签约.纯签约. 首次支付时签约和纯签约在后续周期若需要发起自动扣款时,需要在应用服务中发起申请扣 ...

  3. Java实现字节小程序微信担保支付及回调超详细

    1:在平台申请支付功能,设置回调接口,token 2:服务端支付下单 加密工具类 import java.nio.charset.StandardCharsets; import java.secur ...

  4. 小程序实现h5页面的微信支付

    项目需求: 由于小程序的热度高涨,公司为了引流,又想降低研发成本,所以将原先的H5项目嵌套在现在的小程序中. 之前的h5项目虽然实现了微信支付,但是嵌套之后小程序无法直接使用之前的h5支付功能.为了达 ...

  5. 微信H5支付、非微信H5支付、公众号支付、小程序支付

    文章目录 前言 一.微信H5支付和非微信H5支付 二.公众号支付 三.小程序支付 总结 前言 最近公司又要搞微信支付,大体上就是把app上VIP那一套内容但做成网页版,更方便用户去购买vip,老板就让 ...

  6. 微信支付总结--小程序与H5页面微信支付

    项目开发过程中,涉及到了微信支付功能,这里做一个详细的记录. 小程序和H5的后端代码是通用的,前端调用不同的代码实现,这里不是重点,会简单的给出相关的代码. 微信支付,官方给了开发文档,但是其中还是有 ...

  7. 微信小程序嵌套h5页面怎么实现小程序支付

    微信小程序嵌套h5页面怎么实现小程序支付 小程序嵌套h5页面怎么实现小程序支付小程序中嵌套h5页面,但是不能再h5页面拉起小程序支付,这时是需要小程序方拉起支付 目前的流程,外链发送订单请求拿到预支付 ...

  8. 微信小程序如何开通支付功能?

    微信小程序商城支付方式有哪些,如何开通小程序商城的支付功能,商家开通小程序支付功能的条件有哪些,小程序支付和微商城支付有冲突吗,小程序商城支付方式下商家如何提现,手续费多少? 微信小程序商城支付方式 ...

  9. Shopro商城 高级版 Fastadmin和Uniapp进行开发的多平台商城(微信公众号、微信小程序、H5网页、Android-App、IOS-App)

    Shopro商城无加密的开源源码(可用于自营+外包项目(多主体).可用于外包定制开发项目) shopro 商城,一款基于 uni-app 的前端模板商城.目前适配了(小程序+app+h5+公众号). ...

最新文章

  1. Android ViewAnimationUtils (动画) 的使用
  2. C++工作笔记-getter/setter方法中大佬的风格
  3. android 日期下拉选择控件,Android 中日期控件与下拉列表的使用
  4. nginx 为什么要反向代理 影藏后端 高效连接(给nginx,他自己返回) 端口冲突解决 多个服务...
  5. 使用DirectX播放wav声音文件
  6. aps生产计划排产的计划类型
  7. 学习游戏开发,先学OpenGL再学Direct3D还是直接学习Direct3D?
  8. esp32 io速度_Adafruit HUZZAH32-ESP32Feather的说明
  9. mvc中viewdata 和viewbag的区别
  10. 支付宝摇一摇红包脚本【Auto.js】
  11. PCFG句法分析之CYK算法
  12. SEDA,一个不错的技术。
  13. JSP在线书城购买系统用myeclipse定制开发mysql数据库mvc模式java编程servlet
  14. 第1个ARM裸板程序及引申(第004节_汇编与机器码)【修改机器码点亮led2]
  15. inxni扫地机器人_智能扫地机器人品牌介绍:以内(inxni)
  16. 柔性机器人力控打磨与刚性机器人打磨的主要区别
  17. 手机号码格式正则验证
  18. 【软件设计师中级】设计模式之抽象工厂学习笔记(c++)
  19. redhat6.5安装nvidia驱动
  20. 更改linux root颜色,linux 颜色配置

热门文章

  1. checkbox的listView 实现多选,全选,反选
  2. word文档设置页码
  3. 我做的Delphi资料收集查看软件
  4. 递归基础知识和尾递归的实现
  5. 【web】仿微博浏览量自增(判断元素是否在可视区+停留2s事件响应)
  6. 如何接入IPC的GB28181平台
  7. PC安卓模拟器之vdi虚拟硬盘内容抢救
  8. I O对计算机系统性能的影响,DASD操作对计算机系统性能的影响
  9. LaTeX代码: 首字下沉效果 ← 利用 lettrine 宏包
  10. Photoshop 之利用 调整边缘 抠图