php快手小程序微信H5支付
这里写自定义目录标题
- 快手接入流程
- 快手微信支付
- 签名快手
- 获取微信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支付相关推荐
- java整合快手小程序(登陆,支付,结算,退款,手机号授权登陆)
快手小程序官方文档 快手小程序官网地址 快手小程序后台配置回调域名 代码部分 KSUrlConstants(请求地址常量) 商品类目编号根据业务自行替换 package com.dfjs.consta ...
- .NET 小程序微信用户支付
微信支付有两种模式:微信用户主动发起的支付.签约委托支付协议后自动支付. 自动支付又分为两种:首次支付时签约.纯签约. 首次支付时签约和纯签约在后续周期若需要发起自动扣款时,需要在应用服务中发起申请扣 ...
- Java实现字节小程序微信担保支付及回调超详细
1:在平台申请支付功能,设置回调接口,token 2:服务端支付下单 加密工具类 import java.nio.charset.StandardCharsets; import java.secur ...
- 小程序实现h5页面的微信支付
项目需求: 由于小程序的热度高涨,公司为了引流,又想降低研发成本,所以将原先的H5项目嵌套在现在的小程序中. 之前的h5项目虽然实现了微信支付,但是嵌套之后小程序无法直接使用之前的h5支付功能.为了达 ...
- 微信H5支付、非微信H5支付、公众号支付、小程序支付
文章目录 前言 一.微信H5支付和非微信H5支付 二.公众号支付 三.小程序支付 总结 前言 最近公司又要搞微信支付,大体上就是把app上VIP那一套内容但做成网页版,更方便用户去购买vip,老板就让 ...
- 微信支付总结--小程序与H5页面微信支付
项目开发过程中,涉及到了微信支付功能,这里做一个详细的记录. 小程序和H5的后端代码是通用的,前端调用不同的代码实现,这里不是重点,会简单的给出相关的代码. 微信支付,官方给了开发文档,但是其中还是有 ...
- 微信小程序嵌套h5页面怎么实现小程序支付
微信小程序嵌套h5页面怎么实现小程序支付 小程序嵌套h5页面怎么实现小程序支付小程序中嵌套h5页面,但是不能再h5页面拉起小程序支付,这时是需要小程序方拉起支付 目前的流程,外链发送订单请求拿到预支付 ...
- 微信小程序如何开通支付功能?
微信小程序商城支付方式有哪些,如何开通小程序商城的支付功能,商家开通小程序支付功能的条件有哪些,小程序支付和微商城支付有冲突吗,小程序商城支付方式下商家如何提现,手续费多少? 微信小程序商城支付方式 ...
- Shopro商城 高级版 Fastadmin和Uniapp进行开发的多平台商城(微信公众号、微信小程序、H5网页、Android-App、IOS-App)
Shopro商城无加密的开源源码(可用于自营+外包项目(多主体).可用于外包定制开发项目) shopro 商城,一款基于 uni-app 的前端模板商城.目前适配了(小程序+app+h5+公众号). ...
最新文章
- Android ViewAnimationUtils (动画) 的使用
- C++工作笔记-getter/setter方法中大佬的风格
- android 日期下拉选择控件,Android 中日期控件与下拉列表的使用
- nginx 为什么要反向代理 影藏后端 高效连接(给nginx,他自己返回) 端口冲突解决 多个服务...
- 使用DirectX播放wav声音文件
- aps生产计划排产的计划类型
- 学习游戏开发,先学OpenGL再学Direct3D还是直接学习Direct3D?
- esp32 io速度_Adafruit HUZZAH32-ESP32Feather的说明
- mvc中viewdata 和viewbag的区别
- 支付宝摇一摇红包脚本【Auto.js】
- PCFG句法分析之CYK算法
- SEDA,一个不错的技术。
- JSP在线书城购买系统用myeclipse定制开发mysql数据库mvc模式java编程servlet
- 第1个ARM裸板程序及引申(第004节_汇编与机器码)【修改机器码点亮led2]
- inxni扫地机器人_智能扫地机器人品牌介绍:以内(inxni)
- 柔性机器人力控打磨与刚性机器人打磨的主要区别
- 手机号码格式正则验证
- 【软件设计师中级】设计模式之抽象工厂学习笔记(c++)
- redhat6.5安装nvidia驱动
- 更改linux root颜色,linux 颜色配置