支付宝移动支付实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

public class MainActivity extends Activity { private EditText name_et,des_et,price_et; // 商户PID:支付宝应用中的商户id public static final String PARTNER = "2088221844842500"; // 商户收款账号:支付宝账号 public static final String SELLER = "itcast1205@163.com";
};
}
} /** * create the order info. 创建订单信息 * */ private String getOrderInfo(String subject, String body, String price) { // 签约合作者身份ID String orderInfo = "partner=" + "\"" + PARTNER + // 签约卖家支付宝账号 orderInfo += "&seller_id=" + "\"" + SELLER + "\"";
// 必须异步调用 Thread payThread = new Thread(payRunnable); payThread.start();
"\"";
// 商户网站唯一订单号:服务器自己给定的 orderInfo += "&out_trade_no=" + "\"" + getOutTradeNo() + "\""; // 商品名称 orderInfo += "&subject=" + "\"" + subject + "\""; // 商品详情 orderInfo += "&body=" + "\"" + body + "\""; // 商品金额 orderInfo += "&total_fee=" + "\"" + price + "\""; // 服务器异步通知页面路径 //自己的服务器如果想知道致富到底有没有成功,当支付宝服 务完成后,会调用此链接进行通知,此链接有自己的服务器开发人员设 置 orderInfo += "&notify_url=" + "\"" + "http://notify.msp.hk/notify.htm" + "\""; // 服务接口名称, 固定值:不用管 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=\"30m\""; // extern_token为经过快登授权获取到的alipay_open_id, 带上此参数用户将使用授权的账户进行支付 // orderInfo += "&extern_token=" + "\"" + extern_token + "\""; // 支付宝处理完请求后,当前页面跳转到商户指定页面的路 径,可空 orderInfo += "&return_url=\"m.alipay.com\"";
}
return orderInfo;
/** * get the out_trade_no for an order. 生成商户订单号,该 值在商户端应保持唯一(可自定义格式规范) * */ private String getOutTradeNo() { SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss", Locale.getDefault()); Date date = new Date(); String key = format.format(date); Random r = new Random(); key = key + r.nextInt(); key = key.substring(0, 15); return key;
// 商户私钥,pkcs8格式 public static final String RSA_PRIVATE = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAOdq0lS/uzkzwXnqJ // 支付宝公钥:指的是应用平台中支付宝提供的公钥 public static final String RSA_PUBLIC = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrI private static final int SDK_PAY_FLAG = 1; @SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { @SuppressWarnings("unused") public void handleMessage(Message msg) { switch (msg.what) { case SDK_PAY_FLAG: { PayResult payResult = new PayResult((String) msg.obj); /** * 同步返回的结果必须放置到服务端进行验证 (验证的规则请看https://doc.open.alipay.com/doc2/ * detail.htm? spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665& * docType=1) 建议商户依赖异步通知 */ String resultInfo = payResult.getResult();// 同步返回需要验证的信息 String resultStatus = payResult.getResultStatus(); // 判断resultStatus 为“9000”则代表支付 成功,具体状态码代表含义可参考接口文档 if (TextUtils.equals(resultStatus, "9000")) { Toast.makeText(MainActivity.this, "支付成功", Toast.LENGTH_SHORT).show(); } else { // 判断resultStatus 为非"9000"则代 表可能支付失败 // "8000"代表支付结果因为支付渠道原 因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异 步通知为准(小概率状态) if (TextUtils.equals(resultStatus, "8000")) { Toast.makeText(MainActivity.this "支付结果确认中", Toast.LENGTH_SHORT).show(); } else { // 其他值就可以判断为支付失败, 包括用户主动取消支付,或者系统返回的错误
支付宝接口实现移动支付
一、加密解密
1、网银支付普遍使用的是非对称加密算法,RSA。 二、支付宝开发者平台 1、注册账号(一般是企业账号)--->创建应用--->添加功能-->申请上线--->等待审核 2、配置应用环境:设置密钥(使用密钥生成器生成) 三、Demo演示 1、下载Android版的支付宝SDK:文档中心-->移动支付的 SDK 2、运行alipaydemo. 3、添加相关信息:
Toast.makeText(MainActivity.this "支付失败", Toast.LENGTH_SHORT).show(); } } break;
}; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); name_et = (EditText) findViewById(R.id.editText1); des_et = (EditText) findViewById(R.id.editText2); price_et = (EditText) findViewById(R.id.editText3); } public void pay(View v){ String startPay = name_et.getText().toString(); String des = des_et.getText().toString(); String price = price_et.getText().toString(); startPay(startPay,des,price); } private void startPay(String name,String des,String price){ //生成订单信息 String orderInfo = getOrderInfo(name, des, price); System.out.println(orderInfo); /** * 特别注意,这里的签名逻辑需要放在服务端,切勿将私钥 泄露在代码中! */ //对订单信息用私钥进行编码 String sign = sign(orderInfo); try { /** * 仅需对sign 做URL编码 */ sign = URLEncoder.encode(sign, "UTF-8"); } catch (UnsupportedEncodingException e) {
四、构建自己的Demo 1、主要是PayDemoActivity类的模拟; 2、导入支付宝内部的jar包; 3、最重要的还是相关信息; 4、源码页面
package com.example.paydemoopen; import import import import import import java.io.UnsupportedEncodingException; java.net.URLEncoder; java.text.SimpleDateFormat; java.utilBiblioteka BaiduDate; java.util.Locale; java.util.Random;
import com.alipay.sdk.app.PayTask;
import import import import import import import import import
android.annotation.SuppressLint; android.app.Activity; android.os.Bundle; android.os.Handler; android.os.Message; android.text.TextUtils; android.view.View; android.widget.EditText; android.widget.Toast;
} default: break; }
}
e.printStackTrace();
/** * 完整的符合支付宝参数规范的订单信息 */ //支付串码 final String payInfo = orderInfo + "&sign=\"" + sign + "\"&" + getSignType(); System.out.println(payInfo); //通过支付串码,调用支付宝客户端进行操作 Runnable payRunnable = new Runnable() { @Override public void run() { // 构造PayTask 对象 PayTask alipay = new PayTask(MainActivity.this); // 调用支付接口,获取支付结果 String result = alipay.pay(payInfo, true); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg);
相关文档
最新文档