ios 微信支付 prepay,怎么获取prepay

17:32 提问
微信支付,怎么获取prepay_id?
Java写的,获取到的prepay_id 一直为空,不知道该怎么获取,这与设置API秘钥有关吗?
public static String getPayNo(String url, String xmlParam) {
DefaultHttpClient client = new DefaultHttpClient();
client.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS,
HttpPost httpost = HttpClientConnectionManager.getPostMethod(url);
String prepay_id = "";
httpost.setEntity(new StringEntity(xmlParam, "UTF-8"));
HttpResponse response = httpclient.execute(httpost);
String jsonStr = EntityUtils
.toString(response.getEntity(), "UTF-8");
System.out.println("--jsonStr--"+jsonStr);
Map&String, Object& dataMap = new HashMap&String, Object&();
if (jsonStr.indexOf("FAIL") != -1) {
return prepay_
Map map = doXMLParse(jsonStr);
String return_code = (String) map.get("return_code");
prepay_id = (String) map.get("prepay_id");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return prepay_
按赞数排序
有没有签名,自己去做签名,然后给微信那边发送请求后返回prepay_id
可以看看官网返回 prepay_id的接口
API对应的SDK和调用示例
微信的调用示例就不用看了,n年没更新了,一般微信支付的流程是组装参数、生成sign,与微信预下单接口交互,完了再根据预下单接口返回的参数和之前掉预下单接口的参数,再生成sign,返回app端,拉起支付页面。整个流程都是XML格式协议,这点很重要,好久之前做的了,有什么再问
其他相关推荐关键字:微信支付 微信支付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&
notify_url收到以后,再返回确认成功消息给微信服务器
&return_code&&![CDATA[SUCCESS]]&&/return_code&
演示与源代码
演示地址,微信扫描下方二维码即可体验支付1分钱
我们提供已修复bug并调通的微信支付V3版Demo,费用100元。需要技术指导+源码一共300元。
阅读(...) 评论()微信支付终于成功了(安卓、iOS)在此分享
作者:无根花生
字体:[ ] 类型:转载 时间:
在此分享一篇关于微信支付终于成功了的文章,感兴趣的小伙伴们可以参考一下
经过了几天的痛苦煎熬,终于把微信支付调通,整个调试过程很痛苦,痛苦的主要来源是微信支付的调试真的是,以前调试公众号支付也是一波三折啊。好吧,开始!首先说明,我这里主要没有使用getToken,getOrder方法,我的所有参数全部是在后端生成传递给前端的,看了一下前面朋友分享的源代码,还用到了jquery,md5,sha对于新手来说简直是天文啊,而且jquery在apicloud中效率不好,所以放弃了研究那个代码,另外官方也说了,最好签名等参数全部服务器端生成,微信也是这么说的。
注意:微信本身在apicloud中config.xml文件你要先弄好
先看一下APP端的代码
function wx_pay()
url : serverURL+"weixin/example/app.php",
method : 'POST',
timeout : '30',
dataType : 'json',
returnAll : false,
cache :true,
values:{type:"login"}
function(ret, err)
var back_info=
var weiXin = api.require('weiXin');
weiXin.registerApp
function(ret,err)
if (ret.status)
weiXin.payOrder(
orderId:back_info.prepayid,
partnerId:back_info.partnerid,
nonceStr:back_info.noncestr,
timeStamp:back_info.timestamp,
package:back_info.package,
sign:back_info.sign
},function(ret,err)
if (ret.status)
$alert('支付成功');
$alert(err.msg);
$alert(err.msg);
$alert(json2str(err));
完全按照apicloud写的,没有任何问题,大家可以直接复制过去用,其中的$alert是我自己封装的方法,就是弹出信息而已
下面主要是服务端,见附件&,下载
这个是从微信官方下载下来的,坑爹的微信给的事例太垃圾了,说明也不细致,统一下单的接口生成有了,但是app数据的生成没有,只有js的生成,只能自己写了,其中的签名,随机字符串,还有时间戳等等,每次请求,生产都要重新来一遍,更加可恶的一件事情是,竟然大小写不一致,我本以为直接将js的稍微修改修改就好了,结果不行,死活找不到原因,后来仔细对照文档看了一下,js调起支付的很多参数是有大小写的,但是app调起是全部小写的,具体文档见下方:
JS:https://pay./wiki/doc/api/jsapi.php?chapter=7_7
APP:https://pay./wiki/d ... hapter=9_12&index=2
你们也可以仔细对比,不埋怨了,看代码吧。
首先打开example/app.php,这个是我写的接口文件
ini_set('date.timezone','Asia/Shanghai');
//error_reporting(E_ERROR);
require_once "../lib/WxPay.Api.php";
require_once "WxPay.AppPay.php";
$notify = new AppPay();
/*首先生成prepayid*/
$input = new WxPayUnifiedOrder();
$input-&SetBody("test1");//商品或支付单简要描述(必须填写)
//$input-&SetAttach("test2");//附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据(不必填)
//$input-&SetDetail("Ipad mini 16G 白色,黑色");//商品名称明细列表(不必填)
$input-&SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));//订单号(必须填写)
$input-&SetTotal_fee("1");//订单金额(必须填写)
//$input-&SetTime_start(date("YmdHis"));//交易起始时间(不必填)
//$input-&SetTime_expire(date("YmdHis",time()+600));//交易结束时间10分钟之内不必填)
$input-&SetGoods_tag("test");//商品标记(不必填)
$input-&SetNotify_url("/app/weixin/example/****.php");//回调URL(必须填写)
$input-&SetTrade_type("APP");//交易类型(必须填写)
//$input-&SetProduct_id("");//rade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。
$order = WxPayApi::unifiedOrder($input);//获得订单的基本信息,包括prepayid
$appApiParameters = $notify-&GetAppApiParameters($order);//生成提交给app的一些参数
die($appApiParameters);
以上回调URL一定要写好,我这个附件中还没有做回调的处理,之后会有更新。
1.交易类型必须是APP,如果你是申请的微信公众号的支付,而不是从https://open./这里申请的,就用不成
2.第一步是生成order,返回的是一个数组,保证这个数组里面要有prepay_id,如果没有,那你就要检查配置文件了lib/WxPay.Config.php
继续看代码
example/WxPay.AppPay.php
* APP支付实现类
* @author widyhu
class AppPay
* 参数数组转换为url参数
* @param array $urlObj
private function ToUrlParams($urlObj)
$buff = "";
foreach ($urlObj as $k =& $v)
$buff .= $k . "=" . $v . "&";
$buff = trim($buff, "&");
* 生成直接支付url,支付url有效期为2小时,模式二
* @param UnifiedOrderInput $input
public function GetPayPrepayId($input)
if($input-&GetTrade_type()=="APP")
$result = WxPayApi::unifiedOrder($input);
/*生成APP提交数据*/
public function GetAppApiParameters($UnifiedOrderResult)
if(!array_key_exists("appid", $UnifiedOrderResult)
|| !array_key_exists("prepay_id", $UnifiedOrderResult)
|| $UnifiedOrderResult['prepay_id'] == "")
throw new WxPayException("参数错误");
$appapi = new WxPayAppApiPay();
$appapi-&SetAppid($UnifiedOrderResult["appid"]);
$appapi-&SetPartnerId($UnifiedOrderResult["mch_id"]);
$appapi-&SetPrepayId($UnifiedOrderResult["prepay_id"]);
$timeStamp = time();
$appapi-&SetTimeStamp($timeStamp);
$appapi-&SetNonceStr(WxPayApi::getNonceStr());
$appapi-&SetPackage("Sign=WXPay");
$appapi-&SetSign($appapi-&MakeSign());
$back_arr=$appapi-&GetValues();
$back_arr['prepay_id']=$UnifiedOrderResult["prepay_id"];
$parameters = json_encode($appapi-&GetValues());
这个文件不是官方提供的,是我自己写的,仿照WxPay.NativePay.php这个文件写的,主要看42行GetAppApiParameters这个函数。由此生成了app提交的很多基础数据,在这个文件中又引用了一个类WxPayAppApiPay,在lib/WxPay.Data.php中,最后一个函数,现在我们来看一下配置文件吧/lib/WxPay.Config.php
配置账号信息
class WxPayConfig
//=======【基本信息设置】=====================================
* TODO: 修改这里配置为您自己申请的商户信息
* 微信公众号信息配置
* APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
* MCHID:商户号(必须配置,开户邮件中可查看)
* KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
* 设置地址:https://pay./index.php/account/api_cert
* APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
* 获取地址:https://mp./advanced/advanced?action=dev&t=advanced/dev&token=&lang=zh_CN
* @var string
const APPID = 'wxd3ae8cc5ab312345';
const MCHID = '';
const KEY = '14e1b600b1fd579fd85111';
const APPSECRET = 'e176356adbf';
/*公众号(如果你申请的微信公众号支付而不是微信支付就用这个,但是这个没有办法在app中使用,只能通过扫码或者js)
const APPID = 'wx223c1e5d831c94a5';
const MCHID = '';
const KEY = '14e1b600b1fd579fd85291';
const APPSECRET = '8d95f857aee0749c3aad2';*/
//=======【证书路径设置】=====================================
* TODO:设置商户证书路径
* 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要,可登录商户平台下载,
* API证书下载地址:https://pay./index.php/account/api_cert,下载之前需要安装商户操作证书)
* @var path
const SSLCERT_PATH = '../cert/apiclient_cert.pem';
const SSLKEY_PATH = '../cert/apiclient_key.pem';
//=======【curl代理设置】===================================
* TODO:这里设置代理机器,只有需要代理的时候才设置,不需要代理,请设置为0.0.0.0和0
* 本例程通过curl使用HTTP POST方法,此处可修改代理服务器,
* 默认CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0,此时不开启代理(如有需要才设置)
* @var unknown_type
const CURL_PROXY_HOST = "0.0.0.0";//"10.152.18.220";
const CURL_PROXY_PORT = 0;//8080;
//=======【上报信息配置】===================================
* TODO:接口调用上报等级,默认紧错误上报(注意:上报超时间为【1s】,上报无论成败【永不抛出异常】,
* 不会影响接口调用流程),开启上报之后,方便微信监控请求调用的质量,建议至少
* 开启错误上报。
* 上报等级,0.关闭上报; 1.仅错误出错上报; 2.全量上报
* @var int
const REPORT_LEVENL = 1;
主要是修改
const APPID = 'wxd3ae8cc5ab312345';
const MCHID = '';
const KEY = '14e1b600b1fd579fd85111';
const APPSECRET = 'e176356adbf';
其他的不要动就行了
就这么多了,我现在继续写回调处理的url,写好了继续上吧
相信很多人都遇到了问题,不然怎么可能在论坛里面搜索微信支付没有一个可以实际解决问题的呢。
增加了回调,看代码,把以下代码覆盖到/lib/example/notify.php这个文件就可以了
ini_set('date.timezone','Asia/Shanghai');
error_reporting(E_ERROR);
require_once "../lib/WxPay.Api.php";
require_once '../lib/WxPay.Notify.php';
require_once 'log.php';
//初始化日志
$logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log = Log::Init($logHandler, 15);
class PayNotifyCallBack extends WxPayNotify
//查询订单
public function Queryorder($transaction_id)
$input = new WxPayOrderQuery();
$input-&SetTransaction_id($transaction_id);
$result = WxPayApi::orderQuery($input);
Log::DEBUG("query:" . json_encode($result));
if(array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS")
$out_trade_no=$result['out_trade_no'];//私有订单号,你就用这个订单号来进行你自己订单的各种更新吧
$mch_id=$result['mch_id'];//商户号
$total_fee=$result['total_fee'];//支付金额,出来的金额要除以100
$transaction_id=$result['transaction_id'];//微信内部的订单流水号
$openid=$result['openid'];//微信加密的用户身份识别,app支付的话其实意义不大了
/*以下两行用做调试,会自动生成in_test.txt文件而且后期内容会自动追加到这个文件*/
$fp = fopen('in_test.txt','a+');
fwrite($fp,date("Y-m-d H:i:s").json_encode($result) . "|".$transaction_id." 成功了!rn");
//这个很重要,微信的异步请求,当你执行完了你的内部处理以后给他返回true,微信就认为你的内部处理完成了,就不会再次请求你了,否则他会一直请求你这个文件,知道超时。
//重写回调处理函数
public function NotifyProcess($data, &$msg)
Log::DEBUG("call back:" . json_encode($data));
$notfiyOutput = array();
if(!array_key_exists("transaction_id", $data)){
$msg = "输入参数不正确";
//查询订单,判断订单真实性
if(!$this-&Queryorder($data["transaction_id"])){
$msg = "订单查询失败";
Log::DEBUG("begin notify");
$notify = new PayNotifyCallBack();
$notify-&Handle(false);
以上就是本文的全部内容,希望对大家的学习有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具183556人阅读
java web(18)
Java(22)
最近准备上网页的微信支付,大家可以参考后续教程:
因微信支付已经升级到V3版本,请大家参考官网的帮助文档。
之前一篇提到微信支付的开发过程,写得有点乱,现在重新整理一下。
好了,说说到底该怎样一步一步分享处理。
解压从官网下载下来的开发说明文档(下载地址:):
先把服务端demo的代码整理到我们的服务端中(注意,此代码的编码格式是GBK,直接复制过去注释都会变乱码。可用文本文件打开后再复制过去)。处理完成后启动;且访问:http://localhost:8080/WeiXinpay/
会得到以下视图:
-------------------------------------------------------------------------------------------------------------
页面跳转调用:
后台调用:
点击链接:
0OK&wxd930ea5d5a258f4f&454ceccd624cd8a8c9ddf1&Sign=WXPay&&1c0c02c882&eb139e44b8df8ce01b386f7c016defe5b04896
-------------------------------------------------------------------------------------------------------------
返回控制台可以得到以下视图:
好了,到这里,算是成功了一小步了(哈哈哈哈哈哈 yy一下)。
你也许会问,这些参数到底是作什么用的?更可悲的是,居然没有服务端的接口文档。
唯有先看手头上有的资料了。打开《【微信APP支付】接口文档V1.2_For_Android.pdf》
里面有提到微信支付的调用步骤:
1、获取& access_token
2、生成预支付订单
3、调起微信支付
下面说说这几个步骤:
1、access_token的获取
因为access_token的获取有请求频的限制,只能固化到数据库中了。这个不是难题。
2、生成预支付订单
在微信支付android的接口文档开头有提到:
注意:appsecret、appkey、partnerkey 不应硬编码到客户端程序中,建议需要用到这三个字段的过程都在服务器端完成
故此过程所有的信息全部在服务端生成。那么问题来了?挖掘机.... kao, 应该是,如何生成?
在翻看服务端的demo中,有jsp文件夹。打开一看,都几乎可以直接搬运使用了。
实现该过程的文件:payRequest.jsp
如何在JAVA中实现上面jsp的请求?项目中用到了Spring MVC,代码如下:
@Controller
@RequestMapping(&/weixin/&)
public class WeiXinPayController extends ResponsePage
private Logger log = Logger.getLogger(WeiXinPayController.class);
@RequestMapping(&weixin.do&)
public String doWeinXinRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
Map&Object,Object& resInfo = new HashMap&Object, Object&();
//接收财付通通知的URL
String notify_url = &http://127.0.0.1:8180/tenpay_api_b2c/payNotifyUrl.jsp&;
//---------------生成订单号 开始------------------------
//当前时间 yyyyMMddHHmmss
String currTime = TenpayUtil.getCurrTime();
String strTime = currTime.substring(8, currTime.length());
//四位随机数
String strRandom = TenpayUtil.buildRandom(4) + &&;
//10位序列号,可以自行调整。
String strReq = strTime + strR
//订单号,此处用时间加随机数生成,商户根据自己情况调整,只要保持全局唯一就行
String out_trade_no = strR
//---------------生成订单号 结束------------------------
PackageRequestHandler packageReqHandler = new PackageRequestHandler(request, response);//生成package的请求类
PrepayIdRequestHandler prepayReqHandler = new PrepayIdRequestHandler(request, response);//获取prepayid的请求类
ClientRequestHandler clientHandler = new ClientRequestHandler(request, response);//返回客户端支付参数的请求类
packageReqHandler.setKey(ConstantUtil.PARTNER_KEY);
String retmsg = &&;
String xml_body = &&;
//获取token值
String token = AccessTokenRequestHandler.getAccessToken();
(&获取token------值 & + token);
if (!&&.equals(token)) {
//设置package订单参数
packageReqHandler.setParameter(&bank_type&, &WX&);//银行渠道
packageReqHandler.setParameter(&body&, &测试&); //商品描述
packageReqHandler.setParameter(&notify_url&, notify_url); //接收财付通通知的URL
packageReqHandler.setParameter(&partner&, ConstantUtil.PARTNER); //商户号
packageReqHandler.setParameter(&out_trade_no&, out_trade_no); //商家订单号
packageReqHandler.setParameter(&total_fee&, &1&); //商品金额,以分为单位
packageReqHandler.setParameter(&spbill_create_ip&,request.getRemoteAddr()); //订单生成的机器IP,指用户浏览器端IP
packageReqHandler.setParameter(&fee_type&, &1&); //币种,1人民币
packageReqHandler.setParameter(&input_charset&, &GBK&); //字符编码
//获取package包
String packageValue = packageReqHandler.getRequestURL();
resInfo.put(&package&, packageValue);
(&获取package------值 & + packageValue);
String noncestr = WXUtil.getNonceStr();
String timestamp = WXUtil.getTimeStamp();
String traceid = &&;
////设置获取prepayid支付参数
prepayReqHandler.setParameter(&appid&, ConstantUtil.APP_ID);
prepayReqHandler.setParameter(&appkey&, ConstantUtil.APP_KEY);
prepayReqHandler.setParameter(&noncestr&, noncestr);
prepayReqHandler.setParameter(&package&, packageValue);
prepayReqHandler.setParameter(&timestamp&, timestamp);
prepayReqHandler.setParameter(&traceid&, traceid);
//生成获取预支付签名
String sign = prepayReqHandler.createSHA1Sign();
//增加非参与签名的额外参数
prepayReqHandler.setParameter(&app_signature&, sign);
prepayReqHandler.setParameter(&sign_method&,
ConstantUtil.SIGN_METHOD);
String gateUrl = ConstantUtil.GATEURL +
prepayReqHandler.setGateUrl(gateUrl);
//获取prepayId
String prepayid = prepayReqHandler.sendPrepay();
(&获取prepayid------值 & + prepayid);
//吐回给客户端的参数
if (null != prepayid && !&&.equals(prepayid)) {
//输出参数列表
clientHandler.setParameter(&appid&, ConstantUtil.APP_ID);
clientHandler.setParameter(&appkey&, ConstantUtil.APP_KEY);
clientHandler.setParameter(&noncestr&, noncestr);
//clientHandler.setParameter(&package&, &Sign=& + packageValue);
clientHandler.setParameter(&package&, &Sign=WXPay&);
clientHandler.setParameter(&partnerid&, ConstantUtil.PARTNER);
clientHandler.setParameter(&prepayid&, prepayid);
clientHandler.setParameter(&timestamp&, timestamp);
//生成签名
sign = clientHandler.createSHA1Sign();
clientHandler.setParameter(&sign&, sign);
xml_body = clientHandler.getXmlBody();
resInfo.put(&entity&, xml_body);
retcode = 0;
retmsg = &OK&;
retcode = -2;
retmsg = &错误:获取prepayId失败&;
retcode = -1;
retmsg = &错误:获取不到Token&;
resInfo.put(&retcode&, retcode);
resInfo.put(&retmsg&, retmsg);
String strJson = JSON.toJSONString(resInfo);
return responseAjax(request, strJson);
好了此时,客户端需要的参数都已经可以通过请求:http://localhost:8080/WeiXinpay/weixin/weixin.do 来获取
3、调起微信支付
这步就不需要我们服务端处理了。客户端的兄弟,来接力。
示例的完整代码可以在此链接下载:
最后,微信回调:可以参考jsp文件夹中的payNotifyUrl.jsp来处理,处理过程和上面第二步差不多。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:462688次
积分:2696
积分:2696
排名:第14046名
原创:66篇
评论:175条
(1)(1)(3)(2)(6)(1)(1)(2)(5)(6)(6)(7)(4)(5)(1)(1)(2)(1)(1)(2)(1)(1)(1)(3)(2)(1)(1)(2)(2)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'

我要回帖

更多关于 微信prepayid在哪 的文章

 

随机推荐