1、小程序注册,要以公司的以身份去注册一个小程序,才有微信支付权限;

2、绑定商户号。

3、在小程序填写合法域

二、完成以上条件,你可以得到

“小程序appid 小程序秘钥 ” 这两个用于获取用户openid;

商户号id ,商户号秘钥     支付接口必须的;

三、拿到这四样东西我们开始小程序支付;

前端代码:

/*
调起微信支付
@param 支付价格,不填写默认为1分钱
*/
function pay(total_fee) {
var total_fee = total_fee;
wx.login({
success: res => {

//code 用于获取openID的条件之一

var code = res.code;
wx.request({
url: '后台地址/index.php',
method: "POST",
data: {
total_fee:total_fee,
code: code,
},
header: {
'content-type': 'application/x-www-form-urlencoded' // 默认值
},
success: function (res) { //后端返回的数据
var data = res.data;
console.log(data);
console.log(data[ "timeStamp"]);
wx.requestPayment({
timeStamp: data[ 'timeStamp'],
nonceStr: data[ 'nonceStr'],
package: data[ 'package'],
signType: data[ 'signType'],
paySign: data[ 'paySign'],
success: function (res) {
wx.showModal({
title: '支付成功',
content: '',
})
},
fail: function (res) {
console.log(res);
}
})
}
});
}
})
}

后端代码:

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;
}

效果图:

小程序支付,详细过程相关推荐

  1. 扫描二维码进入小程序超详细过程

    项目场景: 提示:这里简述项目相关背景:二维码中的参数是文章的id.在微信公众号相关的配置在这就不说明了. 假设配置完成域名为:http://xiaobai.com?id=${id}. 下面主要讲述小 ...

  2. thinkphp5微信小程序支付的接口详细过程

    控制器: class Pay extends BaseController {protected $beforeActionList = ['checkExclusiveScope' => [' ...

  3. 微信小程序支付的整个流程和在这个过程中遇到的问题

    前言:这几天公司要做微信的支付功能,花了一天时间写了一个dome,单文档上有太多的坑,有些地方写的不清不楚,所以写了这个文档记录一下过程. 环境 一.后台:微信的sdk <!--微信支付SDK- ...

  4. 微信小程序支付以及退款功能(超详细)

    Springboot整合微信小程序支付 第一步: 第二步:导入微信支付的依赖 第三步:在springboot核心配置文件中配置参数 第四步:创建配置类WxPayAppConfig 第五步:支付方法 s ...

  5. 最齐全的支付宝小程序支付【详细】

    1.开通小程序 得到appid, 开通当面付 2.获取密钥 private_key:就是自己生成的那个 私钥 ali_public_key:就是那个 用 自己生成的公钥,传到支付宝,得的的 支付宝公钥 ...

  6. 微信相关-微信小程序支付的实现(详细的一批版)

    微信相关-微信小程序支付的实现 本人只是个半只脚踏进门槛的JAVA后端,以下代码主要是记录我学到的新东西,所以前端需要各位大佬自己去搞了 目录 微信相关-微信小程序支付的实现 一.准备工作(很重要) ...

  7. TP实现小程序支付功能,前端和后端详细实现代码。

    注意事项: a.当时做的时候后端第一次返回是成功的,但是二次签名时前端发起支付总提示签名验证失败,也困扰了很久,后面细心一点慢慢检查总算发现了问题,二次签名方式类型必须一致,官方第一次签名不是md5  ...

  8. 实战:微信小程序支付开发具体流程

    2019独角兽企业重金招聘Python工程师标准>>> 来源:授权地址 作者:会编码的熊 该文章纪录了我在开发小程序支付过程中的具体流程 1. 申请微信支付 小程序认证后进入微信支付 ...

  9. 小程序下单账号与支付账号不一致不让支付_微信小程序支付流程

    微信支付之小程序支付 微信的支付方式有以下几种,不同的支付方式适用于不同的支付场景,而今天要给大家讲的就是 小程序支付 方式 说到支付功能就要涉及到金钱交易,必定是有比较严格的规范及流程,如要求小程序 ...

最新文章

  1. Win8Metro(C#)数字图像处理--2.3图像反色
  2. poj3723Conscription
  3. ORACLE使用批量插入100万测试数据
  4. ipython文件每次打开重新运行吗_iPython中的多处理:当我不打开任何文件时打开的文件太多?...
  5. MySQL的索引类型及简单优化
  6. Web后端学习笔记 Flask (5) 数据库
  7. c++ List、Vector、Stack、Queue使用
  8. ocp007 题库解析(1-15)
  9. sqlprompt安装注册
  10. HUAWER 华为5G无线数据终端 和 TP-LINK路由器AX6000连接及注意事项
  11. yii mysql gii_Yii 框架使用Gii生成代码操作示例
  12. 小程序 订阅消息 原来就是如此
  13. 艺赛旗(RPA)国家企业信用信息公示系统验证码破解(一)
  14. 网络安全自学笔记04 - 路由器技术
  15. 每日一学:洛必达法则及其使用条件
  16. 前端开发中的脚手架是什么意思
  17. 版本号命名规则 软件版本说明
  18. 有效沟通bic法则_在职场中有效沟通的法则
  19. 大话数据结构笔记【1】:数据结构绪论
  20. Flutter: 把本地相册图片转换成Base64的方法

热门文章

  1. android游戏开发原理及关键技术
  2. 微信小游戏胶囊按钮适配
  3. android studio AVD模拟器安装某些app出现 “app not installed(未安装应用程序)”的问题
  4. Conflux人物志 | 元气满满的办事员小罗
  5. 灵性图书馆:好书推荐-《灵性开悟不是你想的那样》
  6. Oracle中有dateadd吗,SQL Server 中add函数到 oracle date add的操作
  7. 郑昀诚出任区块链解决方案公司 Blocknode Communications项目加速组总监
  8. 黑客暴力破解必备的12大逆向工具!设置再复杂的密码也没用!
  9. 续写千倍币神话,PlusFo到底是何方神圣?
  10. C语言switch 语句