支付跳转页面

public class AlipayUtil {

private Activity activity;

private Class<?> clz;//支付成功后跳转的界面

private String orderid;

private String id;

public AlipayUtil(Activity activity,Class<?> clz,int alipayType, String orderid,String id)  {

this.activity=activity;

this.clz = clz;

this.alipayType=alipayType;

this.orderid = orderid;

this.id = id;

}

// 商户PID

public static final String PARTNER = (String)PropertiesParser.get("PARTNER");

// 商户收款账号

public static final String SELLER = (String)PropertiesParser.get("SELLER");

//商户私钥,pkcs8格式

public static final String RSA_PRIVATE = (String)PropertiesParser.get("RSA_PRIVATE");

//支付宝公钥

public static final String RSA_PUBLIC = (String)PropertiesParser.get("RSA_PUBLIC");

// 服务器异步通知页面路径  网址

// public static final String NOTIFY_URL=ConstUtil.BASE_URL+"alipay/index/";

public static final String NOTIFY_URL=ConstUtil.BASE_URL+"alipay";

//未付款交易的超时时间

public static final String IT_B_PAY=(String)PropertiesParser.get("IT_B_PAY");

private static final int SDK_PAY_FLAG = 1;

private static final int SDK_CHECK_FLAG = 2;

private int resultType;  //结果类型 1成功  0用户取消导致的失败   3不是用户取消的失败

private int alipayType;  //操作类型 1支付 2充值

private String  title;  //执行接口对话框的显示标题

private String  content;//内容

private String money;  //支付,充值的费用

private void setTitleAndContent(){

if(alipayType==2){

if(resultType==1){

title="充值成功";

content="使用支付宝充值成功";

}else if(resultType==0){

title="充值失败";

content="充值失败,用户取消";

}else{

title="充值失败";

content="充值结果确认中。超过15分钟交易会自动关闭,交易金额会自动退还。";

}

}else if(alipayType==1){

if(resultType==1){

title="支付成功";

content="使用支付宝支付成功";

}else if(resultType==0){

title="支付失败";

content="支付失败,用户取消";

}else{

title="支付失败";

content="支付结果确认中。超过15分钟交易会自动关闭,交易金额会自动退还。";

}

}

}

private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case SDK_PAY_FLAG: {

PayResult payResult = new PayResult((String) msg.obj);

// 支付宝返回此次支付结果及加签,建议对支付宝签名信息拿签约时支付宝提供的公钥做验签

String resultInfo = payResult.getResult();

String resultStatus = payResult.getResultStatus();

// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档

if (TextUtils.equals(resultStatus, "9000")) {

//支付成功

resultType=1;

} else {

// 判断resultStatus 为非“9000”则代表可能支付失败

// “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)

if (TextUtils.equals(resultStatus, "8000")) {

//支付结果确认中

resultType=3;

} else {

resultType=0;

// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误

}

}

setTitleAndContent();

//使用对话框 提示用户执行支付的结果

DialogUtil.moneyPayResultDialog(activity,  clz, title, content, new OnClickListener() {

@Override

public void onClick(View v) {

DialogUtil.cancleMoneyPayResultDialog();

if(resultType==1){

if(alipayType==1){//支付成功  跳转主界面

if(orderid.substring(0, 1).equals("o")){

Intent intent = new Intent(activity, clz);

intent.putExtra("orderid", orderid.substring(1));

activity.startActivity(intent);

activity.finish();

activity.overridePendingTransition(R.anim.finish_enter, R.anim.finish_exit);

}else{

Intent intent = new Intent(activity, clz);

orderid = id;

intent.putExtra("orderid", orderid);

activity.startActivity(intent);

activity.finish();

activity.overridePendingTransition(R.anim.finish_enter, R.anim.finish_exit);

}

}else if(alipayType==2){  //充值成功 finish当前界面 回到余额界面 传递充值的金额

activity.setResult(Activity.RESULT_OK,new Intent().putExtra("money", money));

activity.finish();

activity.overridePendingTransition(R.anim.finish_enter, R.anim.finish_exit);

}

}else if(resultType==0){  //支付失败  停留当前界面

}

}

});

break;

}

case SDK_CHECK_FLAG:

PrintUtil.toastLong(activity,msg.obj.toString());

if(!(Boolean)msg.obj){

PrintUtil.toastLong(activity, "您未安装支付宝或者无有效的支付宝账号!");

}

break;

default:

break;

}

};

};

/**

* 进行支付宝支付

* @param subject  商品的名称

* @param body     商品的描述

* @param price    商品的价格

* @param order_id 订单号

*/

public void pay(String subject,String body,String order_id,String price,String id) {

money=price;

if (TextUtils.isEmpty(PARTNER) || TextUtils.isEmpty(RSA_PRIVATE)|| TextUtils.isEmpty(SELLER)) {

PrintUtil.toastLong(activity,"商户信息不全,无法进行支付");

return;

}

// 订单

String orderInfo = getOrderInfo(subject, body, order_id,price);

// 对订单做RSA 签名

String sign = sign(orderInfo);

try {

// 仅需对sign 做URL编码

sign = URLEncoder.encode(sign, "UTF-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

// 完整的符合支付宝参数规范的订单信息

final String payInfo = orderInfo + "&sign=\"" + sign + "\"&"

+ getSignType();

Runnable payRunnable = new Runnable() {

@Override

public void run() {

// 构造PayTask 对象

PayTask alipay = new PayTask(activity);

// 调用支付接口,获取支付结果

String result = alipay.pay(payInfo);

Message msg = new Message();

msg.what = SDK_PAY_FLAG;

msg.obj = result;

mHandler.sendMessage(msg);

}

};

// 必须异步调用

Thread payThread = new Thread(payRunnable);

payThread.start();

}

/**

* check whether the device has authentication alipay account.

* 查询终端设备是否存在支付宝认证账户

*

*/

// public void check() {

// Runnable checkRunnable = new Runnable() {

// @Override

// public void run() {

// // 构造PayTask 对象

// PayTask payTask = new PayTask(activity);

// // 调用查询接口,获取查询结果

// boolean isExist = payTask.checkAccountIfExist();

//

// Message msg = new Message();

// msg.what = SDK_CHECK_FLAG;

// msg.obj = isExist;

// mHandler.sendMessage(msg);

// }

// };

//

// Thread checkThread = new Thread(checkRunnable);

// checkThread.start();

//

// }

/**

* get the sdk version. 获取SDK版本号

*

*/

public void getSDKVersion() {

PayTask payTask = new PayTask(activity);

String version = payTask.getVersion();

PrintUtil.toast(activity, version);

}

/**

* create the order info. 创建订单信息

* @return

*/

public String getOrderInfo(String subject, String body, String order_id,String price) {

// 签约合作者身份ID

String orderInfo = "partner=" + "\"" + PARTNER + "\"";

// 签约卖家支付宝账号

orderInfo += "&seller_id=" + "\"" + SELLER + "\"";

// 商户网站唯一订单号

orderInfo += "&out_trade_no=" + "\"" + order_id + "\"";

// 商品名称

orderInfo += "&subject=" + "\"" + subject + "\"";

// 商品详情

orderInfo += "&body=" + "\"" + body + "\"";

// 商品金额

orderInfo += "&total_fee=" + "\"" + price + "\"";

// 服务器异步通知页面路径

orderInfo += "&notify_url=" + "\"" + NOTIFY_URL

+ "\"";

// 服务接口名称, 固定值

orderInfo += "&service=\"mobile.securitypay.pay\"";

// 支付类型, 固定值

orderInfo += "&payment_type=\"1\"";

// 参数编码, 固定值

orderInfo += "&_input_charset=\"utf-8\"";

// 设置未付款交易的超时时间

// 默认30分钟,一旦超时,该笔交易就会自动被关闭。

// 取值范围:1m~15d。

// m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。

// 该参数数值不接受小数点,如1.5h,可转换为90m。

orderInfo += "&it_b_pay=\""+IT_B_PAY+"\"";

// extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付

// orderInfo += "&extern_token=" + "\"" + extern_token + "\"";

// 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空

orderInfo += "&return_url=\"m.alipay.com\"";

// 调用银行卡支付,需配置此参数,参与签名, 固定值 (需要签约《无线银行卡快捷支付》才能使用)

// orderInfo += "&paymethod=\"expressGateway\"";

return orderInfo;

}

/**

* sign the order info. 对订单信息进行签名

*

* @param content

*            待签名订单信息

*/

public String sign(String content) {

return SignUtils.sign(content, RSA_PRIVATE);

}

/**

* get the sign type we use. 获取签名方式

*

*/

public String getSignType() {

return "sign_type=\"RSA\"";

}

}

时间: 2024-11-10 14:09:10

支付跳转页面的相关文章

Swift中使用presentViewController跳转页面后模拟器显示黑屏问题

Swift中使用presentViewController跳转页面后模拟器显示黑屏问题 问题原因 针对storyboard制作页面和手写页面,需要使用两种不同方法进行页面跳转. 解决办法 针对手写页面及storyboard制作页面,使用代码进行页面跳转的两种方法. 对于使用storyboard制作的页面 var sb = UIStoryboard(name: "Main", bundle:nil) var vc = sb.instantiateViewControllerWithIde

iOS故事板下使用代码跳转页面

如今iOS8下,使用Storyboards开发十分方便,搭配上Size Class后,并且适配更加便捷. 但是突然由代码写界面或者xib转向故事板,难免有一些疑惑. 由于故事板下,基本使用连续来跳转页面,但有些情况下总会用到代码控制页面跳转,这个时候传统的初始化ViewController后push过去会出现一个黑色屏幕,什么内容都没用. 解决方案: UIStoryboard *story = [UIStoryboard storyboardWithName:@"填写故事板名称" bu

SharePoint 如何制作自动跳转页面

SharePoint 如何制作自动跳转页面 SharePoint制作自动跳转的页面非常简单,只要在页面上添加一个Web部件--内容编辑器,加入相应的js代码即可. 本文介绍如何制作自动跳转页面. 1. 新建ASPX页面,命名RedirectingPage. 2. 编辑页面,添加内容编辑器Web部件. 3. 编辑Web部件,选择编辑HTML源代码. 4. 输入js代码,点击确定,保存. 5. 在SharePoint站点首页编辑页面,输入"[["选择RedirectingPage,再输入&

iOS UItextView监听输入特定字符跳转页面选择选项返回

今天有朋友问我一个需求的实现,于是自己写了一个Demo简单的实现了一下: 需求是: 1>比如: 检测用户输入"A"字符串,跳转页面选择选项,将选择的选项放置textView里,作为当前的输入; 2>不是"A"字符,则正常的textView输入; 3.用户跳转选择了,则将选择的输入到textView,否则,还是输入用户输入的字符即可. 实现代码如下: // // ViewController.m // Demo // // Created by 思 彭 o

使用Android点击按钮跳转页面

1.首先新建一个Android工程,命名为MyApp(名字可以自己随意起); 2.以原有的MainActivity.java文件为登录界面,然后在src文件中的包上面右击选择New目录下的Other中的Android Activity,选择BlankActivity,修改一个Activity的名字(自定义),我这里命名为BankActivity,点选finish然后新建完成一个返回页面;\ 3.接下来就要添加布局文件了,我们在res文件下的layout文件里先双击activity_main.xm

js 中如何通过提示框跳转页面

通过提示框跳转页面 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <script> 9 window.onload = function(){ //设置当页面加载时执行 1

asp.net实现弹窗并跳转页面

asp.net的弹窗代码是用Response.Write方法来利用JS弹窗,而跳转页面有.net语言自带的Response.Redirect方法,然而,我们如果写成 1 Response.Write("<script>alert('Hello world!');</script>"); 2 Response.Redirect("Login.aspx"); 这样跳转页面的代码就会覆盖弹窗的代码,用户看不到弹窗就直接跳转了. 为了解决这个问题,我

那些琐碎的知识-----搜索回车跳转页面

如图搜索框,想要实现文本输入内容后敲击回车(等同于点击后面的小放大镜图标)后跳转到搜索结果的页面 <div class="head-ss02"> <input name="ss" type="text" id="search" onkeypress="javascript:enterSubmitss(this,event);" size="2" /> <in

跳转页面定位到指定的位置(转)

跳转页面定位到指定的位置 明天要回家了,今天也没啥事做.就分享下做过的一个小需求,还有很多朋友问过我类似的问题,当时也是跟他们说说简单的思路,并没有分享.今天我就整理下吧. 需求是这样的A页面有的链接,跳转到B页面中.并且要根据A页面的链接不同定位的不同的内容区域.我贴个图你大概就理解了: A页面 B页面 当我点击A页面中3的链接的时候,就要跳转到B页面,并且定位到活动三内容区域: 这个都是一个简单的活动页面,当然你也可以很简单的实现,把B页面拆分成3个页面,分别对应A页面的3个不容的内容,但是