微信h5支付首先商户平台要开通h5支付,然后关联公众号, 这里要注意的是h5支付不需要openid,而微信jsapi支付需要openid。 然后拿到: $appid = ""; //应用 APPID $mch_id = ""; //微信支付商户号 $key = ""; //微信商户 API 密钥 注意配置相关域名和授权目录 商户平台
公众平台
public function web_pay(){ $pr = req::$forms; ///查询到的价格 $sql="select price,id,no from `sm_order` where no='".$pr['oid']."'"; //echo $sql;die; $order = db::queryone($sql); //echo '<pre>';print_r($order);die; $money= $order['price']*100; //充值金额 微信支付单位为分 $userip = self::__get_client_ip(); //获得用户设备 IP //$userip = req::$forms['ip']; //echo $userip;die; $appid = ""; //应用 APPID $mch_id = ""; //微信支付商户号 $key = ""; //微信商户 API 密钥 $out_trade_no = $order['no'];//平台内部订单号 $nonce_str = self::__createNoncestr();//随机字符串 $body = '星座';//内容 $total_fee = $money; //金额 $spbill_create_ip = $userip; //IP $notify_url = "https://ai.shuaishouhotel.com/v1.0.0/XcxPay/FaceAiPay/notify.php"; //回调地址 $trade_type = 'MWEB';//交易类型 具体看 API 里面有详细介绍 $scene_info ='{"h5_info":{"type":"Wap","wap_url":"https://ai.shuaishouhotel.com","wap_name":"支付"}}';//场景信息 必要参数 $signA ="appid=$appid&attach=$out_trade_no&body=$body&mch_id=$mch_id&nonce_str=$nonce_str¬ify_url=$notify_url&out_trade_no=$out_trade_no&scene_info=$scene_info&spbill_create_ip=$spbill_create_ip&total_fee=$total_fee&trade_type=$trade_type"; $strSignTmp = $signA."&key=$key"; //拼接字符串 注意顺序微信有个测试网址 顺序按照他的来 直接点下面的校正测试 包括下面 XML 是否正确die('222'); $sign = strtoupper(MD5($strSignTmp)); // MD5 后转换成大写 $post_data = "<xml> <appid>$appid</appid> <mch_id>$mch_id</mch_id> <body>$body</body> <out_trade_no>$out_trade_no</out_trade_no> <total_fee>$total_fee</total_fee> <spbill_create_ip>$spbill_create_ip</spbill_create_ip> <notify_url>$notify_url</notify_url> <trade_type>$trade_type</trade_type> <scene_info>$scene_info</scene_info> <attach>$out_trade_no</attach> <nonce_str>$nonce_str</nonce_str> <sign>$sign</sign> </xml>";//拼接成 XML 格式 $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";//微信传参地址 //echo $post_data;die; $dataxml = self::__postXmlCurl($post_data,$url); //后台 POST 微信传参地址 同时取得微信返回的参数 $objectxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的 XML 转换成数组 //echo '<pre>';print_r($objectxml);die; if($objectxml['return_code'] == 'SUCCESS'){ //$sql = 'UPDATE sm_order SET sn = "'.$objectxml['sign'].'" WHERE id='.$order['id']; //db::query($sql); //$json = '{"Status":200,"Result":{"sn":"'.$objectxml['sign'].'","PrepayId":"'.$objectxml['prepay_id'].'","Package":[],"Url":"'.$objectxml['mweb_url'].'"}}'; }else{ //$json = '{"Status":551,"Result":{"ErrorMsg":"'.$objectxml['return_msg'].'"}}'; } header('Location: '.$objectxml['mweb_url']); //echo '{"code":1,"orderId":"1320190412181555064378943"}'; }
private function __createNoncestr( $length = 32 ){
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
$str ="";
for ( $i = 0; $i < $length; $i++ ) {
$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return $str;
}
private function __postXmlCurl($xml,$url,$second = 30){
$ch = curl_init();
//设置超时
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
//设置 header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//post 提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
//运行 curl
$data = curl_exec($ch);
//返回结果
if($data){
curl_close($ch);
return $data;
}else{
$error = curl_errno($ch);
curl_close($ch);
echo "curl 出错,错误码:$error"."<br>";
}
}
private function __get_client_ip() {
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
}
//对参数排序,生成MD5加密签名
private function getParam($paramArray, $isencode=false,$k)
{
$paramStr = '';
ksort($paramArray);
$i = 0;
foreach ($paramArray as $key => $value)
{
if ($key == 'Signature'){
continue;
}
if ($i == 0){
$paramStr .= '';
}else{
$paramStr .= '&';
}
$paramStr .= $key . '=' . ($isencode?urlencode($value):$value);
++$i;
}
$stringSignTemp=$paramStr."&key=".$k;
$sign=strtoupper(md5($stringSignTemp));
return $sign;
}
private function isWeixin() {
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {
return true;
} else {
return false;
}
}
private function getOpenid($appid, $appsecret)
{
$SERVER_NAME = $_SERVER['SERVER_NAME'];
$REQUEST_URI = $_SERVER['REQUEST_URI'];
$redirect_uri = urlencode('https://' . $SERVER_NAME . $REQUEST_URI);
$code = $_GET['code'];
if (! $code) {
// 网页授权当scope=snsapi_userinfo时才会提示是否授权应用
$autourl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
header("location:$autourl");
} else {
// 获取openid
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
$row = $this->__postXmlCurl($url);
return ($row['openid']);
}
}
private function get_code($callback,$xingzuo_url){
$appid = $this->appid;
$scope = 'snsapi_userinfo';
$state = md5(uniqid(rand(), TRUE));//唯一ID标识符绝对不会重复
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . urlencode($callback) . '&response_type=code&scope=' . $scope . '&state=' . $state . '#wechat_redirect';
echo $url;die;
header("Location:$url");
}
服务命令sudo gitlab-ctl reconfigure # 启动服务;sudo vim /etc/gitlab/gitlab.rb # 修改默认的配置文件;gitlab-rake gitlab:check SANITIZE=true --trace # 检查gitlab;sudo gitlab-ctl status # 查看服务状态;sudo gitlab-ctl start # 启动所有 gitlab 组件;sudo gitlab-ctl stop # 停止所有 gitlab 组_sudo gitlab-ctl reconfigure是什么命令
thinkphp中如何使用phpspreadsheet插件一、总结一句话总结:多百度,百度什么都有1、thinkphp中用composer安装的插件的命名空间是什么?use PhpOffice\PhpSpreadsheet\Spreadsheet;use PhpOffice\PhpSpreadsheet\Writer\Xlsx;2、插件的代码实例哪里找?...
目录题目解题思路CodeAnswer题目X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。每块金属原料的外形、尺寸完全一致,但重量不同。金属材料被严格地堆放成金字塔形。 {7 }, {5 ,8} , {7, 8,8 }, {9, 2, 7, 2}, _python蓝桥杯 承压计算
阿里云物联网-高位订阅问题
igoodful@glc (my_table) >show slave status\G;*************************** 1. row ***************************Slave_IO_State: Waitingfor master tosend eventMaster_Host:10.10.10.10Master_User: mysqlsyn..._mysql system lock
串口模块的波特率比较特别,找了几个串口工具都不支持。。。所以,干脆用python自己来写了,其实已经好奇好久了,别人的工具各种不顺手。需要pyserial的支持,兼容各种平台,不需要新编译二进制文件。 先贴一个定时发送的代码:import serialimport timeser = serial.Serial('/dev/ttyUSB0', 250000, tim..._python调用串口
t3标准版帐套升级为T6报错t3标准版帐套升级为T6报错t3标准版帐套升级为T6报错原因:1、首先要保证你的T3打上补丁2、在T3升级工具中通帐套引入(注:这时已经报了好多错,你不用去管它,实际你已经把帐套引入过了)3、在SQLserver的查询分析器中执行(注:这点很重要)把T3系统管理输出的U6中的那个*U6.sql文件里所有行拷贝出来,粘贴在查询分析器里,选中要升级的数据库,执行4、再把如下..._远程服务器桌面的ip地址和服务器网卡配置的地址不一致
时间限制:1000MS 代码长度限制:10KB提交次数:9027 通过次数:2456题型: 编程题 语言: G++;GCC 编写算法,创建初始化容量为LIST_INIT_SIZE的顺序表T,并实现插入、删除、遍历操作。本题目给出部分代码,请补全内容。...................................................................................._合并链表 时间限制:1000ms 代码长度限制:10kb 提交次数:3724 通过次数:2077 题型:
当我们在was 上建立 APPServer的时候,was 会帮助我们默认指定APPServer的 http服务的端口号和管理控制台的端口号,在建立概要文件的时候我们可以修改was默认分配给我们的端口号,可是如果我们是在后期APPServer 已经建立成功了在http 服务的端口号呢? 只需要修改两个地方: Websphere 修改端口2008-08-13 2
服务器环境:CentOS7+nginx1.16+php7.0+mysql8.0服务器的网站在高并发时偶尔会挂掉,nginx报502重启php-fpm后恢复正常,经过数次错误被客户投诉后,下定决心要解决这个问题既然是重启php-fpm后恢复正常,那就从php着手。1、找到php的错误日志文件,查看vi/var/log/php-fpm/error.log发现大量warning错误提示建议增加pm.s...
之前在测试搭建flyway,于是出现了标题中的问题。就去看了这位老哥的解决方案,但是没有解决。献上老哥的文章:https://blog.csdn.net/qq_20107237/article/details/107905640,有兴趣的可以看看。来看看我的解决方案:在项目的 pom.xml 文件中添加如下代码: <build> <resources> <resource> <direc_flyway failed to initialize: none of the following migration scripts locatio
设置SSH keys1.检查是否存在SSH在Git Bash输入以下指令(任意位置点击鼠标右键),检查是否已经存在了SSH keys。ls -al ~/.ssh如果不存在就没有关系,如果存在的话,直接删除.ssh文件夹里面所有文件:2.生成SSH输入以下指令(邮箱就是你注册Github时候的邮箱)后,回车:ssh-keygen -t rsa -C "[email protected]..._github搭建个人博客时ssh类型是