Android,위 챗 결제 기능 구현
7903 단어 Android위 챗 페 이 먼 트
상점 번호,API 키 획득
위 챗 오픈 플랫폼 에서 심 사 를 통과 한 앱 앱 앱 을 확인 하고 결제 기능 을 신청 할 지 여 부 를 확인 합 니 다.신청 이 완료 되면 위 챗 결제|상점 플랫폼 에 로그 인 합 니 다http://pay.weixin.qq.com해당 하 는 상점 번호,API 키 를 확인 합 니 다.
신청 위 챗 결제 인터페이스
로그 인 상점 플랫폼
상점 번호 보기
>API 키 가 져 오기
STEP 1:선불 주문 생 성
상품 정보,사업 자 정 보 를 Basic NameValuePair 로 저장 한 다음 List 목록 에 저장 하고 xml 문자열 형식 을 만들어 POST 방식 으로 위 챗 이 제공 하 는 인 터 페 이 스 를 구성 합 니 다.https://api.mch.weixin.qq.com/pay/unifiedorder 데 이 터 를 보 내 고 정 보 를 되 돌려 받 으 며 prepay 획득id 선불 주문 번호
>주문 생 성 요청
private String genProductArgs() {
StringBuffer xml = new StringBuffer();
try {
String nonceStr = genNonceStr();
xml.append("</xml>");
List<NameValuePair> packageParams = new LinkedList<NameValuePair>();
packageParams
.add(new BasicNameValuePair("appid", Constants.APP_ID));
packageParams.add(new BasicNameValuePair("body", "weixin"));
packageParams
.add(new BasicNameValuePair("mch_id", Constants.MCH_ID));
packageParams.add(new BasicNameValuePair("nonce_str", nonceStr));
packageParams.add(new BasicNameValuePair("notify_url",
"http://121.40.35.3/test"));
packageParams.add(new BasicNameValuePair("out_trade_no",
genOutTradNo()));
packageParams.add(new BasicNameValuePair("spbill_create_ip",
"127.0.0.1"));
packageParams.add(new BasicNameValuePair("total_fee", "1"));
packageParams.add(new BasicNameValuePair("trade_type", "APP"));
String sign = genPackageSign(packageParams);
packageParams.add(new BasicNameValuePair("sign", sign));
String xmlstring = toXml(packageParams);
return xmlstring;
} catch (Exception e) {
Log.e(TAG, "genProductArgs fail, ex = " + e.getMessage());
return null;
}
}
>선불 주문 번호 획득
String url = String.format("https://api.mch.weixin.qq.com/pay/unifiedorder");
String entity = genProductArgs();
Log.e("orion", entity);
byte[] buf = Util.httpPost(url, entity);
String content = new String(buf);
Log.e("orion", content);
Map<String, String> xml = decodeXml(content);
두 번 째 단계:위 챗 결제 매개 변수 생 성appId 는 APP 앱 에 대응 하 는 APPID,partnerId 는 업 체 번호,prepayId 는 첫 번 째 단계 에서 받 은 선불 주문,packageValue 수치 찾기 Sign=WXPay,nonceStr 는 난수,timestamp 생 성 된 시간 스탬프,sign 은 APP 서명 에 대응 합 니 다.
지불 매개 변수 설정
private void genPayReq() {
req.appId = Constants.APP_ID;
req.partnerId = Constants.MCH_ID;
req.prepayId = resultunifiedorder.get("prepay_id");
req.packageValue = "Sign=WXPay";
req.nonceStr = genNonceStr();
req.timeStamp = String.valueOf(genTimeStamp());
List<NameValuePair> signParams = new LinkedList<NameValuePair>();
signParams.add(new BasicNameValuePair("appid", req.appId));
signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));
signParams.add(new BasicNameValuePair("package", req.packageValue));
signParams.add(new BasicNameValuePair("partnerid", req.partnerId));
signParams.add(new BasicNameValuePair("prepayid", req.prepayId));
signParams.add(new BasicNameValuePair("timestamp", req.timeStamp));
req.sign = genAppSign(signParams);
sb.append("sign
" + req.sign + "
");
show.setText(sb.toString());
Log.e("orion", signParams.toString());
}
》nonceStr 난수
private String genNonceStr() {
Random random = new Random();
return MD5.getMessageDigest(String.valueOf(random.nextInt(10000))
.getBytes());
}
타임 스탬프 타임 스탬프
private long genTimeStamp() {
return System.currentTimeMillis() / 1000;
}
앱 서명
private String genAppSign(List<NameValuePair> params) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < params.size(); i++) {
sb.append(params.get(i).getName());
sb.append('=');
sb.append(params.get(i).getValue());
sb.append('&');
}
sb.append("key=");
sb.append(Constants.API_KEY);
this.sb.append("sign str
" + sb.toString() + "
");
String appSign = MD5.getMessageDigest(sb.toString().getBytes())
.toUpperCase();
Log.e("orion", appSign);
return appSign;
}
STEP 3:위 챗 앱 결제지불 하기 전에 핸드폰 에 위 챗 클 라 이언 트 를 설치 해 야 합 니 다.없 으 면 위 챗 을 다운로드 한 다음 에 지불 을 조정 하 라 고 알려 줍 니 다.AndroidManifest.xml 파일 에 다음 설정 을 추가 합 니 다.
<activity
android:name=".act.PayActivity"
android:exported="true"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="wxf2f565574a968187" />
</intent-filter>
</activity>
>위 챗 으로 지급
private void sendPayReq() {
msgApi.registerApp(Constants.APP_ID);
msgApi.sendReq(req);
}
위 챗 수신 결과IWXAPIEventHandler 인 터 페 이 스 를 구현 한 Activity 에서 onResp(BaseResp)방법 을 재 작성 하여 위 챗 결 과 를 수신 합 니 다.
>결제 결과 접수
public void onResp(BaseResp resp) {
Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.app_tip);
builder.setMessage(getString(R.string.pay_result_callback_msg,
resp.errStr + ";code=" + String.valueOf(resp.errCode)));
builder.show();
}
}
본 고 는,까지 정리 되 었 으 니 여러분 의 읽 기 학습 을 환영 합 니 다.이상 은 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.