小程序支付,详细过程
1、小程序注册,要以公司的以身份去注册一个小程序,才有微信支付权限;
2、绑定商户号。
3、在小程序填写合法域
二、完成以上条件,你可以得到
“小程序appid 小程序秘钥 ” 这两个用于获取用户openid;
商户号id ,商户号秘钥 支付接口必须的;
三、拿到这四样东西我们开始小程序支付;
前端代码:
//code 用于获取openID的条件之一
后端代码:
index.php
//获取openid
if(I("post.code"))
{
$code=I("post.code");
$WX_APPID = '小程序id';
$WX_SECRET = '小程序key';
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $WX_APPID . "&secret=" . $WX_SECRET . "&js_code=" . $code . "&grant_type=authorization_code";
$infos = json_decode(file_get_contents($url));
$openid = $infos->openid;
}
if(I("post.total_fee"))
{
$total_fee=I("post.total_fee");
}
else
{
$total_fee=1;
}
$appid = '小程序id';//如果是公众号 就是公众号的appid
$body = '小程序支付';
$mch_id = '商户号';
$nonce_str = $this->nonce_str();//随机字符串
$notify_url = ‘回调地址自己填写’';
$openid = $openid;
$out_trade_no = time();//商户订单号
$spbill_create_ip = '服务器ip';
$total_fee = $total_fee;//因为充值金额最小是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['openid'] = $openid;
$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;
$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>
<openid>'.$openid.'</openid>
<out_trade_no>'.$out_trade_no.'</out_trade_no>
<spbill_create_ip>'.$spbill_create_ip.'</spbill_create_ip>
<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);//全要大写
if($array['RETURN_CODE'] == 'SUCCESS' && $array['RESULT_CODE'] == 'SUCCESS'){
$time = time();
$tmp='';//临时数组用于签名
$tmp['appId'] = $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'];
}
echo json_encode($data); //小程序需要的数据 返回前端
}
public function nonce_str(){
$result = '';
$str = 'QWERTYUIOPASDFGHJKLZXVBNMqwertyuioplkjhgfdsamnbvcxz';
for ($i=0;$i<32;$i++){
$result .= $str[rand(0,48)];
}
return $result;
}
//签名函数
public function sign($data){
$stringA = '';
foreach ($data as $key=>$value){
if(!$value) continue;
if($stringA) $stringA .= '&'.$key."=".$value;
else $stringA = $key."=".$value;
}
$wx_key = 'lijinwenlijinwenlijinwenlijinwen';//申请支付后有给予一个商户账号和密码,登陆后自己设置key
$stringSignTemp = $stringA.'&key='.$wx_key;//申请支付后有给予一个商户账号和密码,登陆后自己设置key
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;
}
//获取xml
private 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;
}
效果图:
小程序支付,详细过程相关推荐
- 扫描二维码进入小程序超详细过程
项目场景: 提示:这里简述项目相关背景:二维码中的参数是文章的id.在微信公众号相关的配置在这就不说明了. 假设配置完成域名为:http://xiaobai.com?id=${id}. 下面主要讲述小 ...
- thinkphp5微信小程序支付的接口详细过程
控制器: class Pay extends BaseController {protected $beforeActionList = ['checkExclusiveScope' => [' ...
- 微信小程序支付的整个流程和在这个过程中遇到的问题
前言:这几天公司要做微信的支付功能,花了一天时间写了一个dome,单文档上有太多的坑,有些地方写的不清不楚,所以写了这个文档记录一下过程. 环境 一.后台:微信的sdk <!--微信支付SDK- ...
- 微信小程序支付以及退款功能(超详细)
Springboot整合微信小程序支付 第一步: 第二步:导入微信支付的依赖 第三步:在springboot核心配置文件中配置参数 第四步:创建配置类WxPayAppConfig 第五步:支付方法 s ...
- 最齐全的支付宝小程序支付【详细】
1.开通小程序 得到appid, 开通当面付 2.获取密钥 private_key:就是自己生成的那个 私钥 ali_public_key:就是那个 用 自己生成的公钥,传到支付宝,得的的 支付宝公钥 ...
- 微信相关-微信小程序支付的实现(详细的一批版)
微信相关-微信小程序支付的实现 本人只是个半只脚踏进门槛的JAVA后端,以下代码主要是记录我学到的新东西,所以前端需要各位大佬自己去搞了 目录 微信相关-微信小程序支付的实现 一.准备工作(很重要) ...
- TP实现小程序支付功能,前端和后端详细实现代码。
注意事项: a.当时做的时候后端第一次返回是成功的,但是二次签名时前端发起支付总提示签名验证失败,也困扰了很久,后面细心一点慢慢检查总算发现了问题,二次签名方式类型必须一致,官方第一次签名不是md5 ...
- 实战:微信小程序支付开发具体流程
2019独角兽企业重金招聘Python工程师标准>>> 来源:授权地址 作者:会编码的熊 该文章纪录了我在开发小程序支付过程中的具体流程 1. 申请微信支付 小程序认证后进入微信支付 ...
- 小程序下单账号与支付账号不一致不让支付_微信小程序支付流程
微信支付之小程序支付 微信的支付方式有以下几种,不同的支付方式适用于不同的支付场景,而今天要给大家讲的就是 小程序支付 方式 说到支付功能就要涉及到金钱交易,必定是有比较严格的规范及流程,如要求小程序 ...
最新文章
- Win8Metro(C#)数字图像处理--2.3图像反色
- poj3723Conscription
- ORACLE使用批量插入100万测试数据
- ipython文件每次打开重新运行吗_iPython中的多处理:当我不打开任何文件时打开的文件太多?...
- MySQL的索引类型及简单优化
- Web后端学习笔记 Flask (5) 数据库
- c++ List、Vector、Stack、Queue使用
- ocp007 题库解析(1-15)
- sqlprompt安装注册
- HUAWER 华为5G无线数据终端 和 TP-LINK路由器AX6000连接及注意事项
- yii mysql gii_Yii 框架使用Gii生成代码操作示例
- 小程序 订阅消息 原来就是如此
- 艺赛旗(RPA)国家企业信用信息公示系统验证码破解(一)
- 网络安全自学笔记04 - 路由器技术
- 每日一学:洛必达法则及其使用条件
- 前端开发中的脚手架是什么意思
- 版本号命名规则 软件版本说明
- 有效沟通bic法则_在职场中有效沟通的法则
- 大话数据结构笔记【1】:数据结构绪论
- Flutter: 把本地相册图片转换成Base64的方法
热门文章
- android游戏开发原理及关键技术
- 微信小游戏胶囊按钮适配
- android studio AVD模拟器安装某些app出现 “app not installed(未安装应用程序)”的问题
- Conflux人物志 | 元气满满的办事员小罗
- 灵性图书馆:好书推荐-《灵性开悟不是你想的那样》
- Oracle中有dateadd吗,SQL Server 中add函数到 oracle date add的操作
- 郑昀诚出任区块链解决方案公司 Blocknode Communications项目加速组总监
- 黑客暴力破解必备的12大逆向工具!设置再复杂的密码也没用!
- 续写千倍币神话,PlusFo到底是何方神圣?
- C语言switch 语句