PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > HBuilderX教程 > 正文

    hbuilder 支付宝和微信支付插件配置

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:HBuilder 基座已实现H5 plus的支付API,现已集成支付宝快捷支付平台。使用支付功能前必须在支付宝网站开通快捷支付服务,并配置服务器生...
    HBuilder 基座已实现H5 plus的支付API,现已集成支付宝快捷支付平台。使用支付功能前必须在支付宝网站开通”快捷支付“服务,并配置服务器生成订单信息。

    开发指导

    支付流程如下:
    hbuilder 支付宝和微信支付插件配置

    plus API使用步骤:
    1. 调用plus.payment.getChannels()获取系统支持的支付通道;
    2. 调用plus.payment.request()发起支付请求。

    示例代码

    var channel=null;
    // 1. 获取支付通道
    function plusReady(){
        // 获取支付通道
        plus.payment.getChannels(function(channels){
            channel=channels[0];
        },function(e){
            alert("获取支付通道失败:"+e.message);
        });
    }
    document.addEventListener('plusready',plusReady,false);
    
    var ALIPAYSERVER='http://demo.dcloud.net.cn/helloh5/payment/alipay.php?total=';
    var WXPAYSERVER='http://demo.dcloud.net.cn/helloh5/payment/wxpay.php?total=';
    // 2. 发起支付请求
    function pay(id){
        // 从服务器请求支付订单
        var PAYSERVER='';
        if(id=='alipay'){
            PAYSERVER=ALIPAYSERVER;
        }else if(id=='wxpay'){
            PAYSERVER=WXPAYSERVER;
        }else{
            plus.nativeUI.alert("不支持此支付通道!",null,"捐赠");
            return;
        }
        var xhr=new XMLHttpRequest();
        xhr.onreadystatechange=function(){
            switch(xhr.readyState){
                case 4:
                if(xhr.status==200){
                    plus.payment.request(channel,xhr.responseText,function(result){
                        plus.nativeUI.alert("支付成功!",function(){
                            back();
                        });
                    },function(error){
                        plus.nativeUI.alert("支付失败:" + error.code);
                    });
                }else{
                    alert("获取订单信息失败!");
                }
                break;
                default:
                break;
            }
        }
        xhr.open('GET',PAYSERVER);
        xhr.send();
    }
    

    注:第二步中获取到的订单数据需要在服务器通过支付宝平台获取PID和密钥生成。

    HBuilder应用配置

    分享插件添加方法具体步骤如下:
    1. 双击应用的manifest.json文件,选中“使用第三方插件”
    hbuilder 支付宝和微信支付插件配置
    Ctrl+S保存。


    1. 点击manifest.json文件的“代码视图”,在permissions节点下添加Payment节点:
      hbuilder 支付宝和微信支付插件配置


    2. 在plus -> distribute -> plugins 节点下添加payment节点:

      hbuilder 支付宝和微信支付插件配置

      alipay节点下配置支付宝相关信息
      scheme值为iOS平台调用支付宝的“快捷支付”应用返回时用到的标识,推荐使用小写字符串。
      weixin节点下配置微信支付相关信息
      appid值为在微信开放平台申请应用的AppID值。

       


    支付宝功能申请


    1. 登录支付宝账号,签约申请“移动快捷支付”功能,操作流程参考:
      支付宝帮助中心

    2. 获取PID,参考教程:
      获取合作者身份ID

    3. 生成密钥(公钥和私钥),并提交到支付宝,参考教程:
      生成RSA密钥
      上传公钥

    服务器生成订单示例(PHP)
    完整示例代码已开源到github

    <?php
    header('Content-type: text/plain');
    // 获取支付金额
    $amount='';
    if($_SERVER['REQUEST_METHOD']=='POST'){
        $amount=$_POST['total'];
    }else{
        $amount=$_GET['total'];
    }
    $total = floatval($amount); 
    if(!$total){ 
        $total = 10; 
    }
    // 对签名字符串转义
    function createLinkstring($para) {
        $arg  = "";
        while (list ($key, $val) = each ($para)) {
            $arg.=$key.'="'.$val.'"&';
        }
        //去掉最后一个&字符
        $arg = substr($arg,0,count($arg)-2);
        //如果存在转义字符,那么去掉转义
        if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
        return $arg;
    }
    // 签名生成订单信息
    function rsaSign($data) {
        $priKey = "%私钥%";   // 生成密钥时获取,直接使用pem文件的字符串
        $res = openssl_get_privatekey($priKey);
        openssl_sign($data, $sign, $res);
        openssl_free_key($res);
        $sign = base64_encode($sign);
        $sign = urlencode($sign);
        return $sign;
    }
    // 支付宝合作身份者ID,以2088开头的16位纯数字 
    $partner = "%PID%";  // 支付宝开通快捷支付功能后可获取
    // 支付宝账号
    $seller_id = "payservice@dcloud.io"; 
    // 商品网址
    $base_path = urlencode('http://demo.dcloud.net.cn/helloh5/payment/');
    // 异步通知地址
    $notify_url = urlencode('http://demo.dcloud.net.cn/helloh5/payment/notify.php');
    // 订单标题
    $subject = 'DCloud项目捐赠';
    // 订单详情
    $body = 'DCloud致力于打造HTML5最好的移动开发工具,包括终端的Runtime、云端的服务和IDE,同时提供各项配套的开发者服务。'; 
    // 订单号,示例代码使用时间值作为唯一的订单ID号
    $out_trade_no = date('YmdHis', time());
    $parameter = array(
        'service'        => 'mobile.securitypay.pay',   // 必填,接口名称,固定值
        'partner'        => $partner,                   // 必填,合作商户号
        '_input_charset' => 'UTF-8',                    // 必填,参数编码字符集
        'out_trade_no'   => $out_trade_no,              // 必填,商户网站唯一订单号
        'subject'        => $subject,                   // 必填,商品名称
        'payment_type'   => '1',                        // 必填,支付类型
        'seller_id'      => $seller_id,                 // 必填,卖家支付宝账号
        'total_fee'      => $total,                     // 必填,总金额,取值范围为[0.01,100000000.00]
        'body'           => $body,                      // 必填,商品详情
        'it_b_pay'       => '1d',                       // 可选,未付款交易的超时时间
        'notify_url'     => $notify_url,                // 可选,服务器异步通知页面路径
        'show_url'       => $base_path                  // 可选,商品展示网站
     );
    //生成需要签名的订单
    $orderInfo = createLinkstring($parameter);
    //签名
    $sign = rsaSign($orderInfo);
    //生成订单
    echo $orderInfo.'&sign="'.$sign.'"&sign_type="RSA"';
    ?>
    

    C#生成支付宝订单示例

    微信支付功能申请


    1. 使用微信支付功能需到微信开放平台申请移动应用并开通支付功能
      微信APP支付接入商户服务中心
      申请应用后可以获取AppID和AppSecret值。


    2. 开通支付功能后可获取支付业务服务器配置数据
      PARTNER:财付通商户号
      PARTNER_KEY:财付通密钥
      PAYSIGNKEY:支付签名密钥


    服务器生成订单示例(PHP)

    <?php
    header('Access-Control-Allow-Origin: *');
    header('Content-type: text/plain');
    
    require_once("classes/RequestHandler.class.php");
    require_once("classes/ResponseHandler.class.php");
    require("classes/client/TenpayHttpClient.class.php");
    
    //财付通商户号
    $PARTNER = "财付通商户号";
    //财付通密钥
    $PARTNER_KEY = "财付通密钥";
    //appid
    $APP_ID="移动应用AppID";
    //appsecret
    $APP_SECRET= "移动应用AppSecret";   
    //paysignkey(非appkey)
    $APP_KEY="支付签名密钥";
    //支付完成后的回调处理页面
    $notify_url = "http://demo.dcloud.net.cn/helloh5/payment/wxnotify.php";
    
    
    // 获取支付金额
    $amount='';
    if($_SERVER['REQUEST_METHOD']=='POST'){
        $amount=$_POST['total'];
    }else{
        $amount=$_GET['total'];
    }
    $total = floatval($amount);
    if(!$total){
        $total = 1;
    }
    $total = $total*100;     // 转成分
    
    // 商品名称
    $subject = 'DCloud项目捐赠';
    // 订单号,示例代码使用时间值作为唯一的订单ID号
    $out_trade_no = date('YmdHis', time());
    
    
    $outparams =array();
    //获取token值
    $reqHandler = new RequestHandler();
    $reqHandler->init($APP_ID, $APP_SECRET, $PARTNER_KEY, $APP_KEY);
    $Token= $reqHandler->GetToken();
    if ( $Token !='' ){
        //=========================
        //生成预支付单
        //=========================
        //设置packet支付参数
        $packageParams =array();        
    
        $packageParams['bank_type']     = 'WX';             //支付类型
        $packageParams['body']          = $subject;         //商品描述
        $packageParams['fee_type']      = '1';              //银行币种
        $packageParams['input_charset'] = 'GBK';            //字符集
        $packageParams['notify_url']    = $notify_url;      //通知地址
        $packageParams['out_trade_no']  = $out_trade_no;    //商户订单号
        $packageParams['partner']       = $PARTNER;         //设置商户号
        $packageParams['total_fee']     = $total;           //商品总金额,以分为单位
        $packageParams['spbill_create_ip']= $_SERVER['REMOTE_ADDR'];  //支付机器IP
        //获取package包
        $package= $reqHandler->genPackage($packageParams);
        $time_stamp = time();
        $nonce_str = md5(rand());
        //设置支付参数
        $signParams =array();
        $signParams['appid']    =$APP_ID;
        $signParams['appkey']   =$APP_KEY;
        $signParams['noncestr'] =$nonce_str;
        $signParams['package']  =$package;
        $signParams['timestamp']=$time_stamp;
        $signParams['traceid']  = 'mytraceid_001';
        //生成支付签名
        $sign = $reqHandler->createSHA1Sign($signParams);
        //增加非参与签名的额外参数
        $signParams['sign_method']      ='sha1';
        $signParams['app_signature']    =$sign;
        //剔除appkey
        unset($signParams['appkey']); 
        //获取prepayid
        $prepayid=$reqHandler->sendPrepay($signParams);
    
        if ($prepayid != null) {
            $pack   = 'Sign=WXPay';
            //输出参数列表
            $prePayParams =array();
            $prePayParams['appid']      =$APP_ID;
            $prePayParams['appkey']     =$APP_KEY;
            $prePayParams['noncestr']   =$nonce_str;
            $prePayParams['package']    =$pack;
            $prePayParams['partnerid']  =$PARTNER;
            $prePayParams['prepayid']   =$prepayid;
            $prePayParams['timestamp']  =$time_stamp;
            //生成签名
            $sign=$reqHandler->createSHA1Sign($prePayParams);
    
            $outparams['retcode']=0;
            $outparams['retmsg']='ok';
            $outparams['appid']=$APP_ID;
            $outparams['noncestr']=$nonce_str;
            $outparams['package']=$pack;
            $outparams['partnerid']=$PARTNER;
            $outparams['prepayid']=$prepayid;
            $outparams['timestamp']=$time_stamp;
            $outparams['sign']=$sign;
    
        }else{
            $outparams['retcode']=-2;
            $outparams['retmsg']='错误:获取prepayId失败';
        }
    }else{
        $outparams['retcode']=-1;
        $outparams['retmsg']='错误:获取不到Token';
    }
    
        //Json 输出
        ob_clean();
        echo json_encode($outparams);
    
    ?>
    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-146-2429-1.html
    相关热词搜索: