微信APP微信扫码支付开发流程的流程是什么?

官方学习交流QQ群:&&&&站长QQ:
提供主流cms教程
提供数据库教程和设计
提供各种常见网页js代码
提供常用的JS特效代码及在线演示
提供jQuery插件教程及插件下载
提供服务器常见问题及教程
提供站长技术、站长资讯等内容
提供常用开发手册和开发工具
您现在的位置:& >
hbuilder 支付宝和微信支付插件配置
导读:HBuilder 基座已实现H5 plus的支付API,现已集成支付宝快捷支付平台。使用支付功能前必须在支付宝网站开通快捷支付服务,并配置服务器生...
HBuilder 基座已实现H5 plus的支付API,现已集成支付宝快捷支付平台。使用支付功能前必须在支付宝网站开通&快捷支付&服务,并配置服务器生成订单信息。
支付流程如下:
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./helloh5/payment/alipay.php?total=';
var WXPAYSERVER='http://demo./helloh5/payment/wxpay.php?total=';
// 2. 发起支付请求
function pay(id){
// 从服务器请求支付订单
var PAYSERVER='';
if(id=='alipay'){
PAYSERVER=ALIPAYSERVER;
}else if(id=='wxpay'){
PAYSERVER=WXPAYSERVER;
plus.nativeUI.alert(&不支持此支付通道!&,null,&捐赠&);
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=function(){
switch(xhr.readyState){
if(xhr.status==200){
plus.payment.request(channel,xhr.responseText,function(result){
plus.nativeUI.alert(&支付成功!&,function(){
},function(error){
plus.nativeUI.alert(&支付失败:& + error.code);
alert(&获取订单信息失败!&);
xhr.open('GET',PAYSERVER);
xhr.send();
注:第二步中获取到的订单数据需要在服务器通过支付宝平台获取PID和密钥生成。
HBuilder应用配置
分享插件添加方法具体步骤如下:
1. 双击应用的manifest.json文件,选中&使用第三方插件&
Ctrl+S保存。
点击manifest.json文件的&代码视图&,在permissions节点下添加Payment节点:
在plus -& distribute -& plugins 节点下添加payment节点:
alipay节点下配置支付宝相关信息
scheme值为iOS平台调用支付宝的&快捷支付&应用返回时用到的标识,推荐使用小写字符串。
weixin节点下配置微信支付相关信息
appid值为在微信开放平台申请应用的AppID值。
支付宝功能申请
登录支付宝账号,签约申请&移动快捷支付&功能,操作流程参考:
获取PID,参考教程:
生成密钥(公钥和私钥),并提交到支付宝,参考教程:
服务器生成订单示例(PHP)
完整示例代码已开源到
header('Content-type: text/plain');
// 获取支付金额
$amount='';
if($_SERVER['REQUEST_METHOD']=='POST'){
$amount=$_POST['total'];
$amount=$_GET['total'];
$total = floatval($amount);
if(!$total){
$total = 10;
// 对签名字符串转义
function createLinkstring($para) {
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./helloh5/payment/');
// 异步通知地址
$notify_url = urlencode('http://demo./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,]
'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&';
微信支付功能申请
使用微信支付功能需到微信开放平台申请移动应用并开通支付功能
申请应用后可以获取AppID和AppSecret值。
开通支付功能后可获取支付业务服务器配置数据
PARTNER:财付通商户号
PARTNER_KEY:财付通密钥
PAYSIGNKEY:支付签名密钥
服务器生成订单示例(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 = &财付通密钥&;
$APP_ID=&移动应用AppID&;
//appsecret
$APP_SECRET= &移动应用AppSecret&;
//paysignkey(非appkey)
$APP_KEY=&支付签名密钥&;
//支付完成后的回调处理页面
$notify_url = &http://demo./helloh5/payment/wxnotify.php&;
// 获取支付金额
$amount='';
if($_SERVER['REQUEST_METHOD']=='POST'){
$amount=$_POST['total'];
$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']
//商品总金额,以分为单位
$packageParams['spbill_create_ip']= $_SERVER['REMOTE_ADDR'];
//支付机器IP
//获取package包
$package= $reqHandler-&genPackage($packageParams);
$time_stamp = time();
$nonce_str = md5(rand());
//设置支付参数
$signParams =array();
$signParams['appid']
$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']
//剔除appkey
unset($signParams['appkey']);
//获取prepayid
$prepayid=$reqHandler-&sendPrepay($signParams);
if ($prepayid != null) {
= 'Sign=WXPay';
//输出参数列表
$prePayParams =array();
$prePayParams['appid']
$prePayParams['appkey']
=$APP_KEY;
$prePayParams['noncestr']
=$nonce_str;
$prePayParams['package']
$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;
$outparams['retcode']=-2;
$outparams['retmsg']='错误:获取prepayId失败';
$outparams['retcode']=-1;
$outparams['retmsg']='错误:获取不到Token';
//Json 输出
ob_clean();
echo json_encode($outparams);
转载请注明(B5教程网)原文链接:/content-146-2429-1.html
网友评论:关键字:微信支付 微信支付v3 jsapi支付 统一支付 Native支付 prepay_id&作者:方倍工作室原文:&&
本文介绍微信支付下的jsapi实现流程
微信支付现在分为v2版和v3版,号之前申请的为v2版,之后申请的为v3版。V3版的微信支付没有paySignKey参数。v2的相关介绍请参考方倍工作室的其他文章。本文介绍的微信支付v3。
1. OAuth2.0授权
JSAPI 支付前需要调用 登录授权接口获取到用户的 Openid 。所以需要做一次授权,这次授权是不弹出确认框的。其实质就是在用户访问
http://www.fangbei.org/wxpay/js_api_call.php
https://open./connect/oauth2/authorize?appid=wx8888&redirect_uri=http://www.fangbei.org/wxpay/js_api_call.php&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
以此来获得code参数,并根据code来获得授权access_token及openid
其实现的详细流程可参考&
在微信支付的Demo中,其代码为
1 //使用jsapi接口
2 $jsApi = new JsApi_pub();
4 //=========步骤1:网页授权获取用户openid============
5 //通过code获得openid
6 if (!isset($_GET['code']))
//触发微信返回code码
$url = $jsApi-&createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
Header("Location: $url");
//获取code码,以获取openid
$code = $_GET['code'];
$jsApi-&setCode($code);
$openid = $jsApi-&getOpenId();
这一步的最终结果就是获得了当前用户的openid
ou9dHt0L8qFLI1foP-kj5x1mDWsM
2. 统一支付
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口统一支付中以下参数从配置中获取,或由类自动生成,不需要用户填写
$this-&parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID
$this-&parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号
$this-&parameters["spbill_create_ip"] = $_SERVER['REMOTE_ADDR'];//终端ip
$this-&parameters["nonce_str"] = $this-&createNoncestr();//随机字符串
$this-&parameters["sign"] = $this-&getSign($this-&parameters);//签名
在JSAPI支付中,另外填写以下参数
//统一支付接口中,trade_type为JSAPI时,openid为必填参数!
$unifiedOrder-&setParameter("openid","$openid");//商品描述
$unifiedOrder-&setParameter("body","方倍工作室");//商品描述
//自定义订单号,此处仅作举例
$timeStamp = time();
$out_trade_no = WxPayConf_pub::APPID."$timeStamp";
$unifiedOrder-&setParameter("out_trade_no","$out_trade_no");//商户订单号
$unifiedOrder-&setParameter("total_fee","1");//总金额
$unifiedOrder-&setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址
$unifiedOrder-&setParameter("trade_type","JSAPI");//交易类型
其他为选填参数
//非必填参数,商户可根据实际情况选填
//$unifiedOrder-&setParameter("sub_mch_id","XXXX");//子商户号
//$unifiedOrder-&setParameter("device_info","XXXX");//设备号
//$unifiedOrder-&setParameter("attach","XXXX");//附加数据
//$unifiedOrder-&setParameter("time_start","XXXX");//交易起始时间
//$unifiedOrder-&setParameter("time_expire","XXXX");//交易结束时间
//$unifiedOrder-&setParameter("goods_tag","XXXX");//商品标记
//$unifiedOrder-&setParameter("openid","XXXX");//用户标识
//$unifiedOrder-&setParameter("product_id","XXXX");//商品ID
这些参数最终组成了这样的xml数据,
&openid&&![CDATA[ou9dHt0L8qFLI1foP-kj5x1mDWsM]]&&/openid&
&body&&![CDATA[方倍工作室]]&&/body&
&out_trade_no&&![CDATA[wx79]]&&/out_trade_no&
&total_fee&1&/total_fee&
&notify_url&&![CDATA[http://www.fangbei.org/wxpay/notify_url.php]]&&/notify_url&
&trade_type&&![CDATA[JSAPI]]&&/trade_type&
&appid&&![CDATA[wx8888]]&&/appid&
&mch_id&&/mch_id&
&spbill_create_ip&&![CDATA[61.50.221.43]]&&/spbill_create_ip&
&nonce_str&&![CDATA[60uf9sh6nmppr9azveb2bn7arhy79izk]]&&/nonce_str&
&sign&&![CDATA[2D8ABBA23D0F]]&&/sign&
将这些数据提交给统一支付接口
https://api.mch./pay/unifiedorder
将获得返回 如下数据
&return_code&&![CDATA[SUCCESS]]&&/return_code&
&return_msg&&![CDATA[OK]]&&/return_msg&
&appid&&![CDATA[wx8888]]&&/appid&
&mch_id&&![CDATA[]]&&/mch_id&
&nonce_str&&![CDATA[Be8YX7gjCdtCT7cr]]&&/nonce_str&
&sign&&![CDATA[885B6D8EF753A00C8EEDB]]&&/sign&
&result_code&&![CDATA[SUCCESS]]&&/result_code&
&prepay_id&&![CDATA[wx]]&&/prepay_id&
&trade_type&&![CDATA[JSAPI]]&&/trade_type&
其中包含了最重要的预支付ID参数,prepay_id,值为&
3、JS API支付
前面的准备工作做好了以后,JS API根据prepay_id生成jsapi支付参数生成代码如下
//=========步骤3:使用jsapi调起支付============
$jsApi-&setPrepayId($prepay_id);
$jsApiParameters = $jsApi-&getParameters();
生成的json数据如下
"appId": "wx8888",
"timeStamp": "",
"nonceStr": "gbwr71b5no6q6ne18c8up1u7l7he2y75",
"package": "prepay_id=wx",
"signType": "MD5",
"paySign": "9CF851EBF6C7D"
在微信浏览器中调试起js接口,代码如下
&meta http-equiv="content-type" content="text/charset=utf-8"/&
&title&微信安全支付&/title&
&script type="text/javascript"&
//调用微信JS api 支付
function jsApiCall()
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
&?php echo $jsApiP ?&,
function(res){
WeixinJSBridge.log(res.err_msg);
//alert(res.err_code+res.err_desc+res.err_msg);
function callpay()
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
jsApiCall();
&/br&&/br&&/br&&/br&
&div align="center"&
&button style="width:210 height:30 background-color:#FE6714; border:0px #FE6714 cursor:
font-size:16" type="button" onclick="callpay()" &贡献一下&/button&
当用户点击&贡献一下&按钮时,将弹出微信支付插件,用户可以开始支付。
4、支付通知
支付成功后,通知接口中也将收到支付成功的xml通知
&appid&&![CDATA[wx8888]]&&/appid&
&bank_type&&![CDATA[CFT]]&&/bank_type&
&fee_type&&![CDATA[CNY]]&&/fee_type&
&is_subscribe&&![CDATA[Y]]&&/is_subscribe&
&mch_id&&![CDATA[]]&&/mch_id&
&nonce_str&&![CDATA[60uf9sh6nmppr9azveb2bn7arhy79izk]]&&/nonce_str&
&openid&&![CDATA[ou9dHt0L8qFLI1foP-kj5x1mDWsM]]&&/openid&
&out_trade_no&&![CDATA[wx79]]&&/out_trade_no&
&result_code&&![CDATA[SUCCESS]]&&/result_code&
&return_code&&![CDATA[SUCCESS]]&&/return_code&
&sign&&![CDATA[0C1D7F550A5A138F0CEB]]&&/sign&
&sub_mch_id&&![CDATA[]]&&/sub_mch_id&
&time_end&&![CDATA[58]]&&/time_end&
&total_fee&1&/total_fee&
&trade_type&&![CDATA[JSAPI]]&&/trade_type&
&transaction_id&&![CDATA[4026]]&&/transaction_id&
阅读(...) 评论()当前访客身份:游客 [
当前位置:
现在公司在开发一款APP,支付部分是内嵌的H5页面,整个流程是怎么样的啊,大神么有接触过么,教教小妹吧
共有7个答案
<span class="a_vote_num" id="a_vote_num_
微信开放平台 申请微信支付。&
<span class="a_vote_num" id="a_vote_num_
建议你接入第三方的bmob支付
<span class="a_vote_num" id="a_vote_num_
微信JS-SDK
<span class="a_vote_num" id="a_vote_num_
JS API&支付
<span class="a_vote_num" id="a_vote_num_
要么自己走微信支付,要么就走ping++这类,会减少你很多工作。强烈建议你还是走微信支付去,弹出原生态微信支付框要好得多。h5的即使用ping++走支付宝也只能是wap方式&
<span class="a_vote_num" id="a_vote_num_
你自己的app内嵌的页面没办法用js的微信支付吧!js微信支付的js库都是内置在微信客户端里面的。有没有引入的说法!
<span class="a_vote_num" id="a_vote_num_
可以考虑用js调原生,可以尝试下用
更多开发者职位上
有什么技术问题吗?
王丽媛的其它问题
类似的话题}

我要回帖

更多关于 php微信支付开发流程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信